Показать сообщение отдельно
  #20 (permalink)  
Старый 06.07.2014, 18:04
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от 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 раза.

Теперь ты понял?
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 06.07.2014 в 18:06.
Ответить с цитированием