2010-03-02 101 views
15

我們有一個gwt-client,它從我們的服務器接收到大量的數據。從邏輯上講,我想在客戶端緩存數據,避免服務器受到不必要的請求。GWT中的客戶端緩存

截至今天,我已經放棄了我的模型來處理緩存數據,這不能很好地擴展。這也是一個問題,因爲我們團隊中的不同開發人員開發自己的「緩存」功能,使項目重複工作。

我在想如何實現一個「單一入口點」,它處理所有的緩存,讓模型無法知道如何處理緩存。

有沒有人有GWT客戶端緩存的經驗?有沒有可以實施的標準方法?

回答

10

我建議你看看gwt-presenterCachingDispatchAsync。它爲執行遠程命令提供了一個單一入口點,因此是緩存的絕佳機會。

A recent blog post概述了一種可能的方法。

6

你可能想看看命令模式; Ray Ryan在Google IO上進行了一次關於GWT最佳實踐的演講,下面是一個成績單:http://extgwt-mvp4g-gae.blogspot.com/2009/10/gwt-app-architecture-best-practices.html

他建議使用命令模式,使用Action和Response/Result對象將服務代理拋出和導出。這些都是封裝要在客戶端上執行的任何緩存的絕佳對象。

這是一段摘錄:「我有一個很好的實現緩存策略的貨幣單元,可能每當我看到相同的GET請求兩次時,我就會緩存上次得到的響應,然後將它返回給我自己立即,不用擔心服務器端的旅程。「

在一個相當大的項目中,我採取了另一個方向。我開發了一個DtoCache對象,它基本上持有對每個AsyncCallback的引用,這個AsyncCallback期望來自等待隊列中的服務調用的響應。一旦DtoCache從服務器接收到對象,它們就被緩存在DtoCache中。此後,緩存的結果將返回給所有排隊的新創建的AsyncCallbacks以進行相同的服務調用。

1

對於用於CRUD操作的已經完全構建的非常複雜的緩存引擎,請考慮Smart GWT。這個例子演示了爲大型數據集做客戶端操作自適應(當高速緩存允許的話),同時還支持呼叫的能力:

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

這種行爲是通過如果你需要把你的ResultSet類暴露在它上面的widget:

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

0

我以爲Itemscript是一種整齊。這是一個可在客戶端(GWT)和服務器上運行的RESTful JSON數據庫。

看看吧!

-jP

1

有緩存的兩個層次:

  • 緩存一個瀏覽器會話中。
  • 緩存跨瀏覽器會話,例如緩存數據在瀏覽器重新啓動後應該可用。

什麼緩存:依賴於應用程序,你可能想緩存

  • 爲特定用戶
  • 公共靜態保護數據(或半靜態的,例如,很少改變)數據

如何緩存:

  • 對於第一個高速緩存級別,我們可以按照答案中的建議使用GWT代碼或編寫自己的代碼。
  • 對於第二個,我們必須使用瀏覽器緩存功能。標準的方法是把你的數據放在html裏面(不管是靜態的html文件,還是動態生成的jsp/servlet)。然後,您的應用程序使用http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsOverlay.html技術來獲取數據。