Javascript 是否有使用“编译”的变通方法函数;“评估”;比源代码函数慢?
我正在实现一个代码编辑应用程序,其中包括动态编译代码。问题是,我注意到对函数使用Javascript 是否有使用“编译”的变通方法函数;“评估”;比源代码函数慢?,javascript,performance,eval,Javascript,Performance,Eval,我正在实现一个代码编辑应用程序,其中包括动态编译代码。问题是,我注意到对函数使用eval会使它比普通函数慢,即使在多次调用它之后也是如此。例如: function bench(f){ var t = Date.now(); f(); console.log((f.name||"")+" time: "+(Date.now()-t)/1000+"s"); }; var arr = []; g = function g(x){ for (var i=0; i
eval
会使它比普通函数慢,即使在多次调用它之后也是如此。例如:
function bench(f){
var t = Date.now();
f();
console.log((f.name||"")+" time: "+(Date.now()-t)/1000+"s");
};
var arr = [];
g = function g(x){
for (var i=0; i<10000000; ++i)
arr[i] = i;
};
// f is the same as g
f = eval("(function f(x){ for (var i=0; i<10000000; ++i) arr[i] = i; })");
for (var i=0; i<5; ++i) bench(f);
for (var i=0; i<5; ++i) bench(g);
for (var i=0; i<5; ++i) bench(f);
for (var i=0; i<5; ++i) bench(g);
请注意,即使在多次调用
f
之后,V8仍然使用比相同的g
版本慢的版本。为什么?有什么解决办法吗?我怀疑这是一个非常针对浏览器和操作系统的问题,很难回答。例如,我建议您在jsperf.com上设置一个测试,并查看此例程在不同设备上的结果。
f time: 0.448s
f time: 0.032s
f time: 0.035s
f time: 0.033s
f time: 0.034s
g time: 0.008s
g time: 0.007s
g time: 0.007s
g time: 0.008s
g time: 0.007s
f time: 0.032s
f time: 0.033s
f time: 0.032s
f time: 0.032s
f time: 0.032s
g time: 0.008s
g time: 0.008s
g time: 0.007s
g time: 0.008s
g time: 0.008s