繁体   English   中英

AngularJS:什么是$ templateCache?

[英]AngularJS: what is $templateCache?

在分析大型AngularJS应用程序时,我开始跟踪$ templateCache。

https://docs.angularjs.org/api/ng/service/ $ templateCache

这个对象是什么? 它是存储部分,因为它们存储在磁盘上或路由中最终呈现的HTML?

我已经将一些这样的代码添加到我的控制器中,以确保它不会持久存在:

$scope.$on('$destroy', function cleanup() { $templateCache.removeAll(); });

编辑 :我正在调查的原因是一个(不是每个)控制器正在加载一个大的部分,其中有几个循环,取决于用户输入它可能是大约100个输入字段与大<select>语句和许多自定义指令。 客户端以这种方式请求它,我想确保在路由期间所有这些都被处理掉。

澄清问题:$ templateCache只存储它们出现在磁盘上的部分,没有存储路由或渲染信息?

默认情况下,在加载模板时,Angular会查看$ templateCache并在XHR上获取模板,因为它无法在$ templateCache中找到它们。 当XHR请求很慢或我们的模板足够大时,它会严重影响最终用户的体验。 我们可以通过将模板缓存加载包装到JavaScript文件中,并将JavaScript文件与应用程序的其余部分一起发送,而不是获取模板XHR。

样品:

angular.module('myApp')
.run(['$templateCache', function($templateCache) {
$templateCache.put('xyz.html', ...);
}]);

因此,除非您非常确定从$ templateCache中删除缓存的模板,否则请不要这样做。

如果我没记错的话,它就是保存部分内容的对象。 在向任何html文件发出请求时(通过路由,指令或包含),angular首先查看$templateCache ,如果需要的文件不存在,它将发出请求并将其放入缓存中。 但如果确实存在,则从那里开始。 因此,如果您每页使用指令100次,它只会对您的指令文件发出一个请求,或者如果您在应用程序中来回导航,它将不会请求已加载的文件。

添加$templateCache.removeAll();是否有意义$templateCache.removeAll(); 在每个控制器? 只有它真的很小的应用程序,否则我建议不要乱用它..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM