我們有一個gwt-client,它從我們的服務器接收到大量的數據。從邏輯上講,我想在客戶端緩存數據,避免服務器受到不必要的請求。GWT中的客戶端緩存
截至今天,我已經放棄了我的模型來處理緩存數據,這不能很好地擴展。這也是一個問題,因爲我們團隊中的不同開發人員開發自己的「緩存」功能,使項目重複工作。
我在想如何實現一個「單一入口點」,它處理所有的緩存,讓模型無法知道如何處理緩存。
有沒有人有GWT客戶端緩存的經驗?有沒有可以實施的標準方法?
我們有一個gwt-client,它從我們的服務器接收到大量的數據。從邏輯上講,我想在客戶端緩存數據,避免服務器受到不必要的請求。GWT中的客戶端緩存
截至今天,我已經放棄了我的模型來處理緩存數據,這不能很好地擴展。這也是一個問題,因爲我們團隊中的不同開發人員開發自己的「緩存」功能,使項目重複工作。
我在想如何實現一個「單一入口點」,它處理所有的緩存,讓模型無法知道如何處理緩存。
有沒有人有GWT客戶端緩存的經驗?有沒有可以實施的標準方法?
我建議你看看gwt-presenter和CachingDispatchAsync
。它爲執行遠程命令提供了一個單一入口點,因此是緩存的絕佳機會。
A recent blog post概述了一種可能的方法。
你可能想看看命令模式; 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以進行相同的服務調用。
對於用於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
有緩存的兩個層次:
什麼緩存:依賴於應用程序,你可能想緩存
如何緩存: