Сообщение от foo
|
Толстым был как раз предложенный Вами тест. Я до сих пор не понял, то ли это шутка была, то-ли серьезно.
|
Уффф... я говорю про скорость работы полученной функции, а не про скорость компиляции строки.
Никто и никогда не будет делать так:
for (...) {
Function('console.log(...)')()
}
Поэтому я и говорю, что твои тесты бессмысленны. Что они тестируют? Скорость компиляции - это не узкое место.
Я же говорю
про скорость работы полученной функции и привёл пример, где эта скорость одинакова, но пояснил, что она одинакова только в этом частном случае, т.к. у функций слишком простое тело.
Я сказал, что во всех современных
VM JS используются JIT компиляторы и что конструкции
eval не обрабатываются этим самым компилятором, а вот
Function обрабатываются.
Гугли что такое JIT компилятор и как он работает, может станет понятно.
Т.е. чем сложнее тело функции, тем очевиднее разница в скорости функции полученной через Function и eval.
global.a = [];
global.b = [];
function test() {
var f1 = eval('(function (val) { global.a.push(val); })');
var f2 = new Function('val', 'global.b.push(val)');
console.time('start');
for (var i = 0; i < 1e6; i++) {
f1(i);
}
console.timeEnd('start');
console.time('start2');
for (var i = 0; i < 1e6; i++) {
f2(i);
}
console.timeEnd('start2');
}
test();
Вот уже чуть более сложный пример у меня Function при тесте в V8 быстрее в 3 раза.
Теперь ты понял?