276
Chương 7: ASP.NET và Web Form
•
Trang của bạn chứa các điều kiểm post-back và dựng nên các sự kiện phía server.
•
Trang của bạn cần thực hiện một hành động khác (như ghi ra file nhật ký, nhập thông
tin vào cơ sở dữ liệu, hoặc thay đổi một biến ứng dụng). Một trang được lưu giữ sẽ sử
dụng lại toàn bộ HTML đã được trả về; phần mã cho trang bị bỏ qua.
•
Trang của bạn có chứa các dữ liệu cần phải được tạo cùng với các dữ liệu hiện hành.
Đây là trường hợp đối với tìm kiếm sản phẩm, nhưng không phải là trường hợp đối với
danh mục sản phẩm.
Trong các trường hợp này, bạn có thể sử dụng một dạng caching linh hoạt hơn. Bạn có thể sử
dụng data-caching (sẽ được mô tả trong mục 7.15) để lưu giữ một đối tượng cụ thể. Hoặc bạn
có thể sử dụng fragment-caching để lưu giữ một phần của trang. Để sử dụng fragment-
caching, bạn cần tạo một điều kiểm người dùng chứa tất cả nội dung có thể được lưu giữ và
thêm chỉ thị
OutputCache
vào điều kiểm người dùng. Khi đó, bạn có thể sử dụng điều kiểm
người dùng này trong một trang web. Phần mã cho trang web vẫn sẽ chạy, nhưng phần điều
kiểm người dùng có thể được lưu giữ.
15.
15.
Dùng l i d li u v i ASP.NET
ạ ữ ệ ớ
Dùng l i d li u v i ASP.NET
ạ ữ ệ ớ
Cache
Cache
Bạn cần sử dụng caching, nhưng bạn không thể lưu giữ toàn bộ một trang vì nó
chứa một số mã cần phải chạy hoặc một số nội dung cần phải được tạo động.
Sử dụng phương thức
Cache.Insert
để lưu giữ bất kỳ đối tượng nào với chính
sách hết hiệu lực trượt (sliding expiration) hoặc hết hiệu lực tuyệt đối (absolute
expiration).
Đối tượng
Cache
cho phép bạn lưu giữ hầu như bất kỳ đối tượng .NET nào bằng một khóa
chuỗi cùng với chính sách hết hiệu lực do bạn định nghĩa. ASP.NET duy trì cache một cách tự
động, gỡ bỏ các đối tượng khi chúng hết hiệu lực hoặc khi cạn bộ nhớ.
Có hai kiểu chính sách hết hiệu lực bạn có thể sử dụng khi lưu giữ dữ liệu trong cache. Hết
hiệu lực tuyệt đối (absolute expiration) làm mất hiệu lực các item đã được lưu giữ sau một
khoảng thời gian cố định, gần giống với output-caching. Hết hiệu lực tuyệt đối là cách tiếp
cận tốt nhất nếu bạn muốn lưu giữ các thông tin cần được làm tươi định kỳ (như danh mục sản
phầm).
// Lưu giữ ObjectToCache trong 10 phút (với khóa là "Catalog").
// TimeSpan.Zero cho biết "không sử dụng sliding expiration".
Cache.Insert("Catalog", ObjectToCache, null,
DateTime.Now.AddMinutes(10), TimeSpan.Zero);
Hết hiệu lực trượt (sliding expiration) gỡ bỏ các đối tượng sau một khoảng thời gian không
dùng đến. Trong trường hợp này, mỗi khi đối tượng được truy xuất, thời gian sống của nó sẽ
được reset. Hết hiệu lực trượt làm việc tốt khi bạn có các thông tin luôn có hiệu lực nhưng
luôn không được sử dụng (như dữ liệu thuộc về quá khứ). Thông tin này không cần được làm
tươi, nhưng không nên giữ nó trong cache nếu nó không được sử dụng.