Javascript AngularJS:$templateCache是什么?
在分析大型AngularJS应用程序时,我开始跟踪$templateCache $templateCache 这个物体是什么?它是否像存储在磁盘上一样存储片段,还是从路由中存储最终呈现的HTML 我在控制器中添加了一些类似的代码,以确保它不会持久化任何内容:Javascript AngularJS:$templateCache是什么?,javascript,angularjs,templates,caching,partials,Javascript,Angularjs,Templates,Caching,Partials,在分析大型AngularJS应用程序时,我开始跟踪$templateCache $templateCache 这个物体是什么?它是否像存储在磁盘上一样存储片段,还是从路由中存储最终呈现的HTML 我在控制器中添加了一些类似的代码,以确保它不会持久化任何内容: $scope.$on('$destroy',函数清理(){ $templateCache.removeAll(); }); 编辑:我之所以要研究这个问题,是因为一个(不是每个)控制器正在加载一个包含多个循环的大型部分,根据用户输入,它可能有
$scope.$on('$destroy',函数清理(){
$templateCache.removeAll();
});代码>
编辑:我之所以要研究这个问题,是因为一个(不是每个)控制器正在加载一个包含多个循环的大型部分,根据用户输入,它可能有大约100个输入字段,其中包含大型
语句和许多自定义指令。客户要求这样做,我想确保所有这些都在路由过程中得到处理
为了澄清这个问题:$templateCache只存储磁盘上显示的部分,没有存储路由或渲染信息?如果我没记错的话,它是保存部分的对象。当对任何html文件发出请求(通过路由、指令或包含)时,angular首先查看$templateCache
,如果所需文件不存在,它将对其发出请求并将其放入缓存中。但如果它真的存在,它就从那里取而代之。因此,如果您每页使用指令100次,它只会对您的指令文件发出一个请求,或者如果您在应用程序中来回导航,它不会请求已加载的文件
添加$templateCache.removeAll()有意义吗代码>在每个控制器上?只有当它是一个非常小的应用程序时,否则我建议不要乱搞它。默认情况下,在加载模板时,Angular会查看$templateCache内部,并在其$templateCache中本地找不到模板时,通过XHR获取模板。
当XHR请求很慢或者我们的模板足够大时,它可能会对最终用户的体验产生严重的负面影响。
我们可以通过将模板缓存加载包装到JavaScript文件中,并将JavaScript文件与应用程序的其余部分一起交付,而不是获取模板XHR
样本:
angular.module('myApp')
.run(['$templateCache', function($templateCache) {
$templateCache.put('xyz.html', ...);
}]);
因此,除非您非常确定要从$templateCache中删除缓存的模板,否则不要这样做。您说“出现在磁盘上”是什么意思?如果你的意思是“如文件中所示”,那么-是。它不是保存编译模板,而是保存从XHR请求返回的内容。我想这回答了我的问题。我相信渲染后的表单不知何故被缓存到了其他地方。