1
所以我有一個夢想。我的夢想是,我的角度應用程序在爲用戶呈現數據之前等待儘可能少的時間。我還想象用戶可以在沒有網絡連接的情況下使用我的應用程序。Angular.js和chrome應用程序的最佳緩存策略是什麼?
基於此,我試圖有兩個級別的緩存。他們是(這些是粗略的名字,不要從字面上理解)內存和磁盤。內存作爲一個全局變量存儲在我的應用程序中,通過一個服務訪問。第二個是「磁盤」,存儲在chrome.storage.sync中。
所以我的應用程序目前試圖從內存加載,嘗試從磁盤加載,然後發送一個緩慢的網絡請求來獲取最新的,如果發現,更新內存和磁盤。
這是正確的做法嗎?我在想如何標準化或抽象這個問題時遇到困難,所以我不必爲每個數據類型手動執行此操作。它很好用,但代碼很多。
// Load from Memory NOW
if(Cache.get("receiptList")) {
$scope.receipts = Cache.get("receiptList");
console.log("Mem Cache hit");
} else {
console.log("Mem Cache miss");
}
// Asynchronously load from disk soon
chrome.storage.sync.get('receiptList', function(value) {
// The $apply is only necessary to execute the function inside Angular scope
if(value) {
$scope.$apply(function() {
console.log("Disk cache hit");
console.log(value.receiptList);
$scope.receipts = value.receiptList;
});
} else {
console.log("Disk cache miss.");
}
});
// Asynchronously load from network later and save
Receipt.query({}, function(result) {
Cache.put("receiptList",result);
chrome.storage.sync.set({'receiptList':result});
$scope.receipts = result;
console.log("Caches set from network.");
});
我面臨完全相同的問題!我還發現默認的角度緩存(或任何高級替代品,如angularCacheFactory)不夠好:它們不使用緩存控制標頭。我最終的目標更加困難:我想從緩存中加載數據,然後訪問網絡資源:如果我得到304(未修改),我就完成了。否則,我再次更新(已經渲染的)數據。我相信這會爲我的需求提供最快的響應時間。我能想到的最佳解決方案是擴展ng-resource服務 - 這可能嗎? – Vova