12/08/2018, 13:06

ASP.NET Caching

A/ Catch cấp độ Page 1/ Là catch đơn giản nhất , tăng performance cho page. Sau khi client gửi request cho server . Page gửi lại và sẽ được catch lại 1 bản copy HTML. 2/ Thực thi Đơn giản thêm một OutputCache directive tới page. Xuất hiện ở đầu của một trang aspx trước bất kỳ một output ...

A/ Catch cấp độ Page

1/ Là catch đơn giản nhất , tăng performance cho page. Sau khi client gửi request cho server . Page gửi lại và sẽ được catch lại 1 bản copy HTML.

2/ Thực thi

Đơn giản thêm một OutputCache directive tới page. Xuất hiện ở đầu của một trang aspx trước bất kỳ một output nào

<%@ OutputCache Duration="60" VaryByParam="*" %>

Các attributes của directive này :

1/ Duration : in seconds. Là một số nguyên dương

2/ Location : Là một trong các thông số này:Any, Client, Downstream, None, Server , ServerAndClient.

3/ VaryByParam : Chỉ định ra biến để catch

Ví dụ Giả dụ bạn có một danh sách sản phẩm và cho phép người dùng xem trang dựa trên categoryID và biến page. Bạn có thể catch nó một khoảng thời gian ( chẳng hạn là 1h vì nó ít khi thay đổi). Sau đó chỉ định VaryByParam là "categoryID;page"

4/ VaryByHeader và VaryByCustom dùng để catch cho mỗi trình duyệt khác nhau.

B/ Catch một phần , catch user controls

1/ Vùng menu cần được catch, hoặc những vùng dữ liệu tạo ra từ datasource. Hoặc là hàng trăm trang cùng dùng chung controls cũng nên đưa vào catch cho controls này hơn là giữa catch riêng cho mỗi trang 2/ **Thực thi ** Cũng giống như catch trang bên trên nhưng phải được sử dụng trong một .ascx file. Nó không được dùng trong webform .

<%@ OutputCache Duration="60" VaryByParam="*" %>

Code này catch các user controls trong 60 giây

<%@ OutputCache Duration="60" VaryByParam="none"
  VaryByControl="CategoryDropDownList" %>

Code này catch CategoryDropDownList trong 60s

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser"
  Shared="true %>

Code này catch các user controls trong 60 giây và mỗi trình duyệt tạo ra một catch riêng. Catch này sau đó được chia sẻ bởi tất cả các trang tham chiếu đến user control này .

C/ Catch API, Sử dụng Catch Object

Lưu dữ liệu trong catch Cách đơn giản nhất là assign giá trị cho catch bằng cách sử dụng một key. Catch giống như HashTable hoặc Dictionary

 Cache["key"] = "value";
 Cache.Insert("key", myXMLFileData, new
  System.Web.Caching.CacheDependency(Server.MapPath("users.xml")));

Cái này sẽ chèn dữ liệu xml từ một file vào catch thay vì cứ mỗi request lại đọc file . CacheDependency đảm bảo rằng khi file thay đổi catch sẽ bị hết hạn cho phép dữ liệu mới nhất sẽ được catch.

Cache.Insert("key", myTimeSensitiveData, null,
  DateTime.Now.AddMinutes(1), TimeSpan.Zero);

Sau một phút catch sẽ bị expire

 Cache.Insert("key", myFrequentlyAccessedData, null,
  System.Web.Caching.Cache.NoAbsoluteExpiration,
  TimeSpan.FromMinutes(1));

Dữ liệu sẽ vẫn còn trong catch sau khi time trôi qua 1 phút mà không có gì tham chiếu đến nó vẫn ở trong catch

Tổng kết

Catch cung cấp cho chương trình hiệu suất tốt. Do đó một chương trình được thiết kế tốt là chương trình được test đầy đủ về hiệu suật. Chương trình có catch bao giờ cũng tốt hơn cái khác. Một sự hiệu biết về lựa chọn catch như một kỹ năng quan trọng cho developer muốn trở thành master.

0