在分析大型AngularJS应用程序时,我开始跟踪$ templateCache。
https://docs.angularjs.org/api/ng/service/ $ templateCache
这个对象是什么?它是存储部分,因为它们存储在磁盘上或路由中最终呈现的HTML?
我已经向我的控制器添加了一些这样的代码,以确保它不会持久存在:
$scope.$on('$destroy', function cleanup() {
$templateCache.removeAll();
});
编辑:我正在调查的原因是单个(不是每个)控制器正在加载一个大的部分,其中有几个循环,取决于用户输入它可能是大约100输入具有大<select>
语句和许多自定义指令的字段。客户端以这种方式请求它,我想确保在路由期间所有这些都被处理掉。
澄清问题:$ templateCache只存储它们出现在磁盘上的部分,没有存储路由或渲染信息?
答案 0 :(得分:2)
默认情况下,在加载模板时,Angular会查看$ templateCache并在XHR上获取模板,因为它无法在$ templateCache中找到它们。 当XHR请求很慢或我们的模板足够大时,它会严重影响最终用户的体验。 我们可以通过将模板缓存加载包装到JavaScript文件中来伪造模板缓存加载,并将JavaScript文件与应用程序的其余部分一起发送,而不是获取模板XHR。
示例:
angular.module('myApp')
.run(['$templateCache', function($templateCache) {
$templateCache.put('xyz.html', ...);
}]);
因此,除非您非常确定从$ templateCache中删除缓存的模板,否则请不要这样做。
答案 1 :(得分:1)
如果我没记错的话,它就是保存部分内容的对象。当向任何html文件发出请求时(通过路由,指令或包含),angular首先查看$templateCache
,如果需要文件不存在,它将发出请求并将其放入缓存中。但如果确实存在,则从那里开始。因此,如果您每页使用100次指令,它只会对您的指令文件发出一次请求,或者如果您在应用程序中来回导航,它将不会请求已经加载的文件。
在每个控制器上添加$templateCache.removeAll();
是否有意义?只有当它真的很小的应用程序,否则我建议不要乱用它..