2013-12-23 53 views
2

我們正在使用來自angularjs的本地存儲模塊。如何將「緩存依賴」設置爲本地存儲

https://github.com/grevory/angular-local-storage

現在,任何人可以建議我們如何可以設置在客戶端緩存的依賴,這樣,當數據的變化在服務器本地存儲無效(強制從服務器重新獲取數據)。

現在在測試環境中,我們不得不要求測試人員在每次發佈時都清除瀏覽器緩存。在生產中不能採用這種方法。

感謝您的幫助。

回答

4

在您的應用程序中設置版本號,並在用戶訪問時將其存儲在本地存儲中。

當應用程序初始化時,將本地存儲版本與App.version進行比較。

如果不同,清除本地存儲並重新呈現,重新加載,重新初始化或您需要爲您的應用程序執行的任何操作。

要處理用戶在實施此行爲之前使用過您的應用程序的情況,只需確保它在本地存儲中找不到本地存儲中的版本密鑰時也清除本地存儲。


只是一些進一步的說明,與評論有關。

由於不同的事情發生,我在本地存儲方面遇到過問題。第3部分超出了問題的範圍,但值得一提的是完整性。

  1. 新版本:應用程序源代碼已更改,其存儲的數據結構有所不同。例如,現在可能是JSON.stringified。或者也許我們期待一個字符串,現在我們得到一個整數,這可能會通過嚴格的類型檢查來破壞某些東西。

    這是使用上述方法解決的。該應用程序已更改,因此該應用程序有一個新版本,並且它知道它不能相信從本地存儲檢索到的數據爲不同的版本。

  2. 您描述的問題:服務器上的數據已更新,應用程序的本地存儲副本已過期。

    我們如何告訴應用程序事情已經改變?定期向服務器請求一些令牌(可能是時間戳),以便我們比較一下自上次訪問數據以來是否發生了變化。 This question談到了許多不同的方式來做到這一點。

  3. JavaScript本身已經發生了變化:我們有一個縮小的生產版本,現在有一個新的版本,但用戶仍然保留舊的版本。當服務器期望對現在從新版本接收的不同請求時,這是一個問題。

    這裏的簡單解決方案是在資源URL末尾添加某種版本號,以便瀏覽器請求application.min.js?v=2而不是application.min.js?v=1

+0

感謝@ bcmcfc您的想法。對不起,如果我有點天真,但你如何以及何時建議獲得服務器版本號?或者,我們可以在每個服務器響應中獲得什麼? – Anoop

+0

道歉,當我第一次看到你的問題時,我不認爲我把它全部用完了。我更專注於緩存方面,而不是數據變化方面。您可能需要一次AJAX調用才能在第一個實例中獲取版本號,或者可能需要在每次加載頁面時獲取版本號?它在某種程度上取決於數據的更改頻率以及您的業務邏輯是如何處理的。 – bcmcfc

+0

也許您可以存儲由Angular應用程序定期請求的lastUpdate時間戳服務器端。如果它最近比應用程序副本更新,請擦除本地存儲並請求新數據。 – bcmcfc