ng-csp指令的性能影响

Performance impact of ng-csp directive

本文关键字:影响 性能 指令 ng-csp      更新时间:2023-09-26

启用内容安全策略并添加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)。也许您可以在这些解析器中放入一些性能评估代码来比较ASTInterpreterASTCompiler

HTH