2. eval()有问题,new Fuction()构造函数也是,尽量避免使用它们。
eval方式比直接调用方式多了一步解析的过程,所以尽量避免使用它,如果必须用它,则最好是把调用的代码包装到函数中,然后eval这个函数,这样减少了解析的时间。eval函数的效率,我们可以用如下的代码测试:
01 |
function testNoEval() { |
02 |
var startTime = new Date(); |
03 |
for (var i=0; i<500000; i++) { |
04 |
var str = 'test' ; |
05 |
} |
06 |
var endTime = new Date(); |
07 |
document.getElementById( 'divShowTime1' ).innerHTML = '耗时1:' + (endTime - startTime) + 'ms' ; |
08 |
} |
09 |
function testEval() { |
10 |
var startTime = new Date(); |
11 |
eval( "for(var i=0; i<500000; i++) { var str = 'test'; }" ); |
12 |
var endTime = new Date(); |
13 |
document.getElementById( 'divShowTime2' ).innerHTML = '耗时2:' + (endTime - startTime) + 'ms' ; |
14 |
} |
测试结果:
IE8 | Firefox | Chrome | |
1 |
耗时1:85ms |
耗时1:2ms |
耗时1:1ms |
2 |
耗时1:82ms |
耗时1:2ms |
耗时1:2ms |
3 |
耗时1:81ms |
耗时1:2ms |
耗时1:1ms |
4 |
耗时1:82ms |
耗时1:2ms |
耗时1:2ms |
测试发现,eval的效率明显慢很多,尤其在Firefox和chrome中。 new Fuction的执行原理和eval类似,所以效率也是不高。