2010-05-19 25 views
5

Tôi hiểu rằng mỗi lần làm mới trang, đặc biệt là trong 'AjaxLand', khiến lớp back-end/code-behind của tôi được gọi từ đầu ... Đây là một vấn đề bởi vì lớp (là một đối tượng thành viên trong System.Web.UI.Page) chứa rất nhiều dữ liệu mà nó nguồn từ một cơ sở dữ liệu. Vì vậy, bây giờ mỗi lần làm mới trang trong AjaxLand đang khiến tôi thực hiện các cuộc gọi DB phụ trợ lớn, thay vì chỉ sử dụng lại đối tượng lớp từ bộ nhớ. Bất kỳ sửa chữa cho điều này? Đây có phải là nơi các biến phiên chạy vào không? Biến phiên có phải là tùy chọn duy nhất tôi phải giữ lại một đối tượng trong bộ nhớ được liên kết với một người dùng đơn lẻ và một cá thể một phiên không?'Caching' một bảng lớn trong ASP.NET

+0

Mỗi lần làm mới trang sẽ làm cho trang được đánh giá (lại), bất kể AJAX có đang được sử dụng hay không. Mã AJAX của bạn KHÔNG được làm mới toàn bộ trang, nên sử dụng lại dữ liệu có liên quan * ở phía máy khách * (ví dụ: không phải là đối tượng .NET trong bộ nhớ [máy chủ]). –

Trả lời

1

Hãy xem MS này article về các cơ chế lưu bộ nhớ cache khác nhau cho ASP.NET. Có một phần có tên là "Cache đối tượng tùy ý trong bộ nhớ máy chủ" mà bạn có thể quan tâm.

0

Kể từ khi bạn đề cập đến Ajax, tôi nghĩ bạn có thể muốn xem xét những điểm sau đây:

Giả bộ dữ liệu lớn này là tĩnh và không thoáng qua, trong cuộc gọi đầu tiên đến Ajax, ứng dụng của bạn truy vấn cơ sở dữ liệu, lấy rất nhiều dữ liệu và trả về cho máy khách (tức là trình duyệt/JavaScript đang chạy trên trình duyệt, vv), máy khách hiện đã có tất cả dữ liệu đó trong bộ nhớ rồi. Sau đó, không cần phải quay lại máy chủ cho cùng một dữ liệu mà khách hàng của bạn đã có trong bộ nhớ. Những gì bạn cần làm là sử dụng JavaScript để xây dựng lại DOM hoặc bất kỳ thứ gì. Tất cả có thể được thực hiện trên máy khách từ thời điểm này trở đi.

Bây giờ giả sử dữ liệu không tĩnh nhưng thoáng qua, bộ nhớ đệm trên máy chủ bằng cách đặt chúng là phiên không phải là giải pháp mà bạn muốn. Mỗi khi máy khách gửi yêu cầu đến máy chủ và máy chủ chỉ trả về những gì trong bộ đệm (phiên), dữ liệu đã cũ và không có sự khác biệt nào với dữ liệu mà máy khách đã có trong bộ nhớ.

Vấn đề là nếu dữ liệu tĩnh, lưu các chuyến đi khứ hồi đến máy chủ khi bạn đã có dữ liệu trong bộ nhớ. Nếu dữ liệu là thoáng qua, tôi sợ không có giải pháp giá rẻ ngoại trừ truy vấn lại hoặc truy xuất lại dữ liệu bằng cách nào đó và gửi mọi thứ lại cho khách hàng.

2

Nếu dữ liệu của bạn dành riêng cho người dùng thì Session sẽ là cách để thực hiện. Hãy cẩn thận nếu bạn có một trang trại hoặc vườn web. Trong trường hợp đó, bạn sẽ cần một máy chủ Session hoặc cơ sở dữ liệu cho phiên của bạn.

Nếu dữ liệu của bạn ở cấp ứng dụng thì Application Data Cache có thể là cách để thực hiện. Hãy cẩn thận nếu bạn có RAM giới hạn và dữ liệu của bạn rất lớn. Bộ nhớ cache có thể tự dọn sạch tại một thời điểm không thích hợp.

Dù bằng cách nào, bạn sẽ cần phải kiểm tra xem ứng dụng của bạn hoạt động như thế nào với các thay đổi của bạn. Bạn thậm chí có thể tìm thấy quay trở lại cơ sở dữ liệu để được lựa chọn ít nhất là xấu.

Ngoài ra, bạn có thể xem Lazy Loading một số dữ liệu để giảm bớt dữ liệu.