LINUX.ORG.RU

Почему хром тормозит?

 , , , ,


0

2

Возник вопрос по поводу преодоления ограничения глубины стека в JS. Накидал вот такой вот код

i=0

tst=function(){i++; try{tst()}catch(e){console.log("recursion: "+i)}}

tst()

i=0
f=function(){tst()}
tst=function(){if(i===30000) return console.log("setTimeout: "+i); i++; setTimeout(f)}

tst()

/*в ноде
11434
30000
*/

Протестировал на ff ноде и хроме. на ff и ноде нормально отрабатывает, за пару десятков секунд примерно. А в хроме - заметно дольше, дольше, раз в 10, как минимум. Второй тест имеется в виду. С чего бы это? Разве движки у него с нодой не одинаковые?

Кстати, если у кого есть ie под рукой, протестируйте, если не трудно.

протестируйте, если не трудно

Только если ты дашь ссылку на jsfiddle.

anonymous ()
Ответ на: комментарий от anonymous

Там можно включить ie отдельно? Я думал, там код на клиенте выполняется.

ambiguousnick ()

setTimeout не гарантирует тебе время выполнения, упоротый.

anonymous ()
Ответ на: комментарий от ambiguousnick

потому что в хроме яваскрипт глючный

Goury ★★★★★ ()

Выравниваются по fps скорее всего. Лень проверять.

zz ★★★★ ()

Разве движки у него с нодой не одинаковые?

Если речь о v4 и последнем хроме, то уже одинаковые. Вот только setTimeout() у них разные. В ноде это оптимизированная (для нужд сокетов) обёртка над libuv таймером.

Что касается лисы и хрома, то у меня время выполнения на уровне погрешности и да, раз в 10 дольше. Что-то мне подсказывает, что в хроме и лисе таймер не переиспользуется, как в ноде, отсюда и просед.

loyd ()

А ещё есть setImmediate и костыль через postMessage. Скорее всего тебе нужно именно это.

loyd ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.