$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
不受此影響,因爲它不是持久性的。
我看到的字符串。這兩個緩存如何與HTTP請求交互?什麼是使用一般的高速緩存的缺點(無論是緩存文件或HTTP請求響應) – devdropper87
感謝你爲這個詳細的解答。我還在AngularJS中找到了$ cacheFactory,它回答了我的其他一些問題:https://docs.angularjs.org/api/ng/service/$cacheFactory。資產緩存+ HTTP請求緩存之間混淆了。 – devdropper87