2015-12-23 92 views
3

我想圍繞緩存的概念包裹我的頭。我沒有廣泛使用它,並有一個關於使用Angular的$templateCache vs瀏覽器的問題緩存:

1)瀏覽器的緩存和Angular的$ templateCache是​​否相互競爭? IE他們是否一般來說存儲相同類型的東西?

鑑於Angular的'自信',在開發Angular應用程序時,我認爲如果瀏覽器存儲相同類型的東西,我們鼓勵您使用$templateCache。如果他們的確存儲了相同類型的東西,那麼使用它們的優缺點是什麼?

2)動態生成的HTML如何適應這個討論哪個緩存(如果他們存儲不同的東西)使用?

3)有沒有利弊一般來說使用緩存?

回答

5

$templateCache與瀏覽器緩存完全分開。

瀏覽器緩存:緩存文件,如myapp.js和fancy.css讓你的瀏覽器不將文件從服務器獲取,如果它有一個最近緩存副本

$ templateCache:是angularjs存儲並跟蹤用於第一次加載不同角度組件/模塊的html片段(,儘管您可以選擇直接加載$templateCache)。每次重新加載應用程序時,都會重建$templateCache,它不會在整個瀏覽器中持續存在。

角這麼做的原因是因爲您可能會重複使用多個模板的相同html文件(或者它可能會在您的站點上多次出現,例如使用指令時)。這允許角度知道它已經有該片​​段,並且可以從緩存中加載它。

答案一對夫婦的問題


如何這兩個緩存與HTTP請求進行交互?

您不能緩存$.ajax$http請求,但這隻會影響提取靜態內容,如JavaScript文件,CSS文件和圖像。瀏覽器緩存的優點是可以提高用戶體驗/性能。如果他們昨天剛剛在您的網站上,他們不必等待才能拉下所有關聯的靜態內容。

angularjs $ templateCache根本不與http進行交互。雖然資源可能來自http提取,並且您的瀏覽器可能會緩存該文件。 Angular正在選擇組織和跟蹤這些html代碼片段。

要在這個片段中更好examplify這個樣子:

angular.module('directivesModule').directive('mySharedScope', function() { 
    return { 
     template: 'Name: {{customer.name}}<br /> Street: {{customer.street}}' 
    }; 
}); 

上述模塊仍然有它的HTML中的模板添加到角$templateCache即使HTML是內嵌在指令中定義。

什麼是更新您的靜態內容的版本時,你必須要小心使用一般的(無論是緩存文件或HTTP請求響應)高速緩存的缺點

。你可以通過各種類型的緩存破壞來解決這個問題。

例如: 您更新myapp.js的是1.1現在是1.2用戶的瀏覽器不會現在,他們將加載舊版本的網站。

要解決此問題,您可以更改名稱。這將強制用戶瀏覽器獲取最近的文件。

ex。 myapp_1.1.js到myapp_1.2.js

再次,angularjs$templateCache不受此影響,因爲它不是持久性的。

+0

我看到的字符串。這兩個緩存如何與HTTP請求交互?什麼是使用一般的高速緩存的缺點(無論是緩存文件或HTTP請求響應) – devdropper87

+0

感謝你爲這個詳細的解答。我還在AngularJS中找到了$ cacheFactory,它回答了我的其他一些問題:https://docs.angularjs.org/api/ng/service/$cacheFactory。資產緩存+ HTTP請求緩存之間混淆了。 – devdropper87

3

上面的$ templateCache的好答案。另外,我相信如果你確定你想要緩存模板,那麼你可能想使用ng-include來檢出。

Angular並不真正鼓勵其他方法。這取決於你的需求。

還有一大口/咕嚕任務角模板,您可以爲預生成步驟中使用的模板文件轉換成獲得您的JS文件下降到滋潤模板緩存