2012-09-30 50 views
0

我在AppEngine支持的應用程序中有一個6MB的二進制文件。我需要把這個文件傳給我的GWT客戶端來做很多計算。我試圖避免在服務器上執行計算以保存實例小時配額。但這意味着我必須以某種方式將文件發送給我的客戶。如何獲取AppEngine數據到GWT客戶端,只有一次

我也不想在應用程序每次打開時將其下載到應用程序,這會傷害我的appengine傳出帶寬配額。

這將是很好的下載一次,然後讓客戶端以某種方式存儲下次打開應用程序時使用。

如何最好地做到這一點?

ClientBundle?使用HTML5存儲?這種事情剛剛沒有完成,我應該只在服務器上進行計算並將結果發送給客戶端?

+0

爲什麼每次訪問應用程序時都需要進行相同的計算?你不能一次做這些計算,只將結果存儲在客戶端上嗎? –

+0

好問題,我應該更清楚了。計算由兩部分組成:一些當前條件和來自用戶的輸入,其將始終改變;和這6MB的二進制數據,這將永遠不會改變。 – aez

回答

0

您可以使用DataResource:

https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle#DataResource

你所面臨的唯一問題是文件大小。不同的瀏覽器有不同的限制 - 我見過5MB和8MB的數字。如果你可以壓縮你的文件低於5MB,你應該在大多數瀏覽器上都可以。 (順便說一下,如果它不能被進一步壓縮,數據量是巨大的。)

此外,您可以檢測移動瀏覽器(或爲移動版本提供不同的URL),並在服務器爲移動用戶。

+0

謝謝安德烈。你能否提供一些關於如何使用GWT在客戶端獲取底層二進制數據的僞代碼?此外,您是否可以評論客戶是否足夠聰明,知道它只需要下載數據一次,從您發佈的鏈接中可以看出,情況確實如此。 – aez

+0

您需要告訴Appengine在您的數據文件上設置正確的標題。這很簡單:https://developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files –

+0

謝謝安德烈。爲了接受你的答案,我想我需要看到一行代碼展示如何使用DataResource獲取二進制數據。如何將它放入某個字節[]或類似的東西? – aez

1

永久緩存文件的最簡單方法是使用application cache

另一種方式是HTML5存儲(localStorage),但有2.5 MB的限制。要使用超過這個數量,你已經使用了IndexedDB(Chrome,Firefox,IE10)和WebSQL(Safari,Opera)。在這種情況下,像YDN-DB這樣的包裝庫有幫助。