ng-csp指令的性能影响

Gui*_*let 13 javascript angularjs content-security-policy angularjs-directive

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

该文件指出,性能可降低高达30%.

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

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

Mar*_*cka 6

我做了一些研究,了解性能影响的最简单方法是查看2012年在AngularJs中引入CSP支持的初始提交(请参阅Github上的问题).

问题是你需要使用(子)表达式的分辨率

a.b.c.d.e  
Run Code Online (Sandbox Code Playgroud)

例如

user.data.books
Run Code Online (Sandbox Code Playgroud)

在HTML模板文件中的Angular表达式中.这个角度解析器使用最初的新函数(参数,代码)来解析这些表达式.但是,要支持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