http://blog.zhaojie.me/2012/08/js-code-from-eval-benchmark.html
原文把一个固定值传给了eval,
那么经过js的解释器一分析后,由于字符串是固定的,所以优化过的js引擎就会直接解析成函数返回。
因为这里eval不eval根本没有区别。将这个来测试eval性能,只能说是一种行为艺术。
那么如何证明eval在实际上对于性的损失影响很大呢?
方法很简单,两行代码,一个浏览器Chrome:
在Chrome下Ctrl+i打开调试界面,点入console:
复制下面的代码执行:
1 | var sum = 0, a = 0, b = 0, i = 0, c = 0; a = new Date(); for(; i < 1000 ; i++) { sum = eval( 'sum + i'); }; b = new Date(); c = b - a; </em></p> |
在这里相关了118 / 3 ~ 40倍……
还有几次的结果是
119 / 2 ~ 60倍
如果这样是无性能损失的话,那60个人就等于是一个人。
受@老赵的错误引导,有下面的结论:
october 2012-08-20 16:26:12
eval并没有什么性能损失吧. eval只是可以让程序员人为控制编译时机, 但编译消耗的时间还是一样的. 比如某一js文件有10000行代码, 假设需要编译x秒 把后5000行代码用eval包起来后,
js文件:
1 … 此处5000行js代码 …
2 eval(“…此处5000行js代码…”)
那么过程就变成了: 编译前5000行 -> 运行前5000行 -> 运行到eval() -> 编译后5000行
看的出来,只是编译人为置后了, 应该没有性能损失….拙见….