ng-csp指令的性能影响

时间:2015-03-02 18:52:36

标签: javascript angularjs angularjs-directive content-security-policy

启用content-security-policy并添加ng-csp指令可阻止Angular使用Function()eval()进行某些优化。

该文件指出,性能可降低至30%。

我想知道使用ng-csp指令实际上会影响哪些角度特征。

是否有可以降低使用该指令的成本的变通方法,模式或其他想法?

1 个答案:

答案 0 :(得分:5)

我做了一些研究,了解性能影响的最简单方法是查看2012年在AngularJs中引入CSP支持的initial commitsee issue on Github too)。

问题是你需要使用像

这样的(子)表达式的分辨率
a.b.c.d.e  

e.g。

user.data.books

在HTML模板文件中的Angular表达式中。用于此的Angular解析器最初使用new Function(arguments, code)来解析这些表达式。但是,要支持CSP,您无法使用new Function()eval()。幻数30%似乎来自http://jsperf.com/angularjs-parse-getter/4source)。我对结果的解释是,带有for循环的代码(即汇编中的跳转)比带有内联/扩展for循环的代码慢。

根据之前的段落,我不相信你可以采取一些有意义的措施来减轻性能损失。也许(如果你是绝望的)只是不要使用长表达式(如a.b.c.d.e.f.g.h)并使用相当短的表达式,但我认为这不是一种优化代码的可行方法。

快进到2015年,AngularJs代码库发生了重大变化,但您可以看到two parsersASTInterpreter(已启用CSP)和ASTCompiler(禁用CSP)。也许您可以在这些解析器中放置一些性能评估代码,以便将ASTInterpreterASTCompiler进行比较。

HTH