2014-04-16 64 views
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."); 
    }); 
+1

我面臨完全相同的問題!我還發現默認的角度緩存(或任何高級替代品,如angularCacheFactory)不夠好:它們不使用緩存控制標頭。我最終的目標更加困難:我想從緩存中加載數據,然後訪問網絡資源:如果我得到304(未修改),我就完成了。否則,我再次更新(已經渲染的)數據。我相信這會爲我的需求提供最快的響應時間。我能想到的最佳解決方案是擴展ng-resource服務 - 這可能嗎? – Vova

回答

相關問題