2010-03-02 38 views
15

Chúng tôi có một gwt-client, nó nhận được khá nhiều dữ liệu từ các máy chủ của chúng tôi. Về mặt logic, tôi muốn lưu trữ dữ liệu ở phía máy khách, tiết kiệm cho máy chủ từ các yêu cầu không cần thiết.Lưu vào bộ nhớ đệm phía máy khách trong GWT

Tính đến hôm nay, tôi đã cho phép các mô hình của mình xử lý bộ nhớ đệm của dữ liệu, không quy mô rất tốt. Nó cũng trở thành một vấn đề vì các nhà phát triển khác nhau trong nhóm của chúng tôi phát triển chức năng "bộ nhớ đệm" của riêng họ, làm cho dự án bị trùng lặp.

Tôi đang suy nghĩ về cách người ta có thể thực hiện một "điểm vào duy nhất", xử lý tất cả bộ nhớ đệm, để các mô hình không biết cách xử lý bộ nhớ đệm.

Có ai có bất kỳ trải nghiệm nào với lưu vào bộ đệm phía máy khách trong GWT không? Có cách tiếp cận chuẩn nào có thể được thực hiện?

Trả lời

10

Tôi đề nghị bạn xem xét gwt-presenterCachingDispatchAsync. Nó cung cấp một điểm vào để thực hiện các lệnh từ xa và do đó là một cơ hội hoàn hảo cho bộ nhớ đệm.

A recent blog post phác thảo một cách tiếp cận có thể có.

6

Bạn có thể muốn xem Mẫu lệnh; Ray Ryan đã tổ chức một cuộc nói chuyện tại Google IO về các phương pháp hay nhất trong GWT, dưới đây là bảng điểm: http://extgwt-mvp4g-gae.blogspot.com/2009/10/gwt-app-architecture-best-practices.html

Ông đề xuất sử dụng Mẫu lệnh bằng cách sử dụng các đối tượng Hành động và Phản hồi/Kết quả được đưa vào và ra khỏi proxy dịch vụ. Đây là những đối tượng tuyệt vời để gói gọn mọi bộ nhớ đệm mà bạn muốn thực hiện trên máy khách.

Dưới đây là phần trích dẫn: "Tôi có đơn vị tiền tệ tốt để thực hiện chính sách lưu vào bộ nhớ cache. Có thể bất cứ khi nào tôi thấy cùng một yêu cầu GET hai lần, tôi sẽ xóa bỏ phản hồi tôi nhận được lần trước và chỉ trả lại bản thân mình ngay lập tức. Không bận tâm với một chuyến đi phía máy chủ. "

Trong một dự án khá lớn, tôi đã thực hiện một hướng khác. Tôi đã phát triển một đối tượng DtoCache về cơ bản đã tổ chức một tham chiếu đến mỗi AsyncCallback đang mong đợi một phản hồi từ một cuộc gọi dịch vụ trong một hàng chờ đợi. Khi DtoCache nhận được các đối tượng từ máy chủ, chúng được lưu trữ bên trong DtoCache. Kết quả được lưu trong bộ nhớ cache từ đó được trả về cho tất cả các AsyncCallbacks được xếp hàng đợi và tạo mới cho cùng một cuộc gọi dịch vụ.

1

Đối với công cụ bộ nhớ đệm rất phức tạp, được xây dựng hoàn chỉnh dành cho các hoạt động CRUD, hãy xem xét Smart GWT. Ví dụ này cho thấy khả năng làm hoạt động client-side thích nghi (khi bộ nhớ cache cho phép nó) trong khi vẫn hỗ trợ phân trang cho các tập dữ liệu lớn:

http://www.smartclient.com/smartgwt/showcase/#grid_adaptive_filter_featured_category

Hành vi này được tiếp xúc thông qua các lớp ResultSet nếu bạn cần phải đặt của bạn widget riêng trên đầu trang của nó:

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/ResultSet.html

0

tôi nghĩ Itemscript là loại gọn gàng. Đó là một cơ sở dữ liệu JSON RESTful hoạt động trên cả máy khách (GWT) và máy chủ.

Hãy khám phá!

-JP

1

Có hai cấp độ của bộ nhớ đệm:

  • Caching trong một phiên trình duyệt.
  • Lưu phiên làm việc qua bộ nhớ đệm, ví dụ: dữ liệu đã lưu trong bộ nhớ cache sẽ khả dụng sau khi trình duyệt khởi động lại.

gì để cache: phụ thuộc vào ứng dụng của bạn, bạn có thể muốn để cache

  • dữ liệu được bảo vệ cho người dùng cụ thể
  • Công tĩnh (hoặc bán tĩnh, ví dụ hiếm khi thay đổi) dữ liệu

Làm thế nào để bộ nhớ cache:

  • Đối với bộ nhớ đệm đầu tiên cấp độ, chúng tôi có thể sử dụng mã GWT như được đề xuất trong câu trả lời hoặc viết câu trả lời của riêng bạn.
  • Đối với thứ hai, chúng tôi phải sử dụng tính năng lưu trong bộ nhớ cache của Trình duyệt. Cách tiếp cận tiêu chuẩn là đặt dữ liệu của bạn bên trong html (cho dù tệp html tĩnh hoặc động được tạo bởi jsp/servlet chẳng hạn). Sau đó, ứng dụng của bạn sử dụng các kỹ thuật http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsOverlay.html để nhận dữ liệu.
Các vấn đề liên quan