$templateCache 与浏览器缓存完全分离。
浏览器缓存:缓存 myapp.js 和 fancy.css 等文件,因此如果您的浏览器有最近缓存的副本,则不必从服务器获取文件
$templateCache:是 angularjs 存储和跟踪 html 的 sn-ps 的方式,这些 html 用于不同的 Angular 组件/模块在它们第一次加载后(尽管您可以选择直接加载$templateCache)。 $templateCache 每次重新加载应用程序时都会重新构建,它不会在浏览器中持久存在。
Angular 这样做的原因是因为您可能会为多个模板重复使用同一个 html 文件(或者它可能会在您的网站上多次出现,例如在使用指令时)。这允许 Angular 知道它已经拥有该 sn-p 并可以从缓存中加载它。
几个问题的答案
这两个缓存如何与 HTTP 请求交互?
您不能缓存 $.ajax 或 $http 请求,但这只会影响获取静态内容,例如 javascript 文件、css 文件和图像。浏览器缓存的优点是它可以改善用户体验/性能。如果他们昨天刚刚在您的网站上,他们不必等待拉下所有相关的静态内容。
angularjs $templateCache 根本不与 http 交互。虽然资源可能来自 http 获取,但您的浏览器可能会缓存该文件。 Angular 选择组织和跟踪那些 html 的 sn-ps。
为了更好地说明这一点,请查看 this sn-p:
angular.module('directivesModule').directive('mySharedScope', function () {
return {
template: 'Name: {{customer.name}}<br /> Street: {{customer.street}}'
};
});
即使 html 在指令定义中是内联的,上述模块中的模板仍会将其 html 添加到角度 $templateCache。
一般来说使用缓存有什么缺点(无论是缓存文件还是来自 HTTP 请求的响应)
在更新静态内容版本时必须小心。您可以通过各种类型的缓存清除来解决此问题。
示例:
你更新你的 myapp.js,原来是 1.1 现在是 1.2 用户浏览器现在不会了,他们会加载旧版本的网站。
要解决此问题,您可以更改名称。这将强制用户浏览器获取最新的文件。
例如。 myapp_1.1.js 到 myapp_1.2.js
同样angularjs $templateCache 不受此影响,因为它不是持久的。