Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有使用“编译”的变通方法函数;“评估”;比源代码函数慢?_Javascript_Performance_Eval - Fatal编程技术网

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