ng-csp指令的性能影响
Performance impact of ng-csp directive
启用内容安全策略并添加ng-csp指令可防止Angular使用Function()
和eval()
进行某些优化。
文档指出,性能可能会下降30%。
我想知道使用ng-csp指令实际会影响哪些角度特征。
是否有变通办法、模式或其他想法可以降低使用该指令的成本?
我做了一些研究,了解性能下降的最简单方法是查看2012年在AngularJs中引入CSP支持的初始提交(也请参阅Github上的问题)。
问题是你需要使用像这样的(子)表达式的分辨率
a.b.c.d.e
例如
user.data.books
在HTML模板文件中的角度表达式中。为此,角度解析器使用了最初新的Function(参数、代码)来解析这些表达式。但是,要支持CSP,您不能使用new Function()
或eval()
。神奇的数字30%似乎来自http://jsperf.com/angularjs-parse-getter/4(来源)。我对结果的解释是,具有for
循环(即程序集中的跳转)的代码比具有内联/扩展for
循环的代码慢。
根据前面的段落,我认为没有什么有意义的事情可以减轻性能打击。也许(如果你很绝望的话)不要使用长表达式(比如a.b.c.d.e.f.g.h
),而是使用相当短的表达式,但我认为这不是优化代码的可行方法。
快进到2015年,AngularJs的代码库发生了实质性的变化,但您可以看到有两个解析器:ASTInterpreter
(用于启用CSP)和ASTCompiler
(用于禁用CSP)。也许您可以在这些解析器中放入一些性能评估代码来比较ASTInterpreter
和ASTCompiler
。
HTH
相关文章:
- NodeJ中的注释会影响性能吗
- javascript getAttribute是否会影响性能或触发布局
- 角度 1 路绑定不影响性能
- 数字精度如何影响 JavaScript 的性能,或者会影响性能
- 函数和对象之间的差异,以及它如何影响性能
- 打开的 APE(Ajax 推送引擎)通道的数量如何影响性能
- 对数组使用delete和后续的.push()会影响性能/内存消耗
- 使用两个或多个$(document).ready会影响性能吗
- 隐藏具有特定ID的元素的最佳方法是什么;不会影响性能
- 使用局部变量(而不是重复的属性访问)是否会影响性能
- id太多会影响性能吗
- 将多个事件处理程序绑定到滚动事件是否会影响性能
- 空try-catch如何影响性能
- 为DOM深处的元素设置动画真的会影响性能吗
- AngularJS -当模型变大时,调用$apply()会影响性能吗?
- 为循环条件缓存数组长度会影响性能吗?
- Angular JS HTML中相同表达式的数量会影响性能吗?
- “Interiting"From null对象似乎不会影响性能
- jQuery无限嵌套会影响性能吗?
- 递增未定义的对象属性而不影响性能