Синтетический JS-тест
Есть у меня такой любимый синтетический тест браузеров — запускать на своём древнем интерпретаторе языка Brainfuck вычисление числа Пи (программа есть на том же сайте).
Для интереса запустил его на браузерах, которые нашлись у меня на машине. Итог:
FireFox 3.1b1pre — 693 + JIT (410) = 1103 Opera 9.60 — 1141 + JIT (828) = 1969 Safari 3.1 — 1719 + JIT (547) = 2266 IE8 beta 2 — 2422 + JIT (843) = 3265 Chrome 0.2.149.30 — 7731 + JIT (950) = 8681
«1719 + JIT (547) = 2266» означает, что браузер проработал чуть больше двух секунд, из них полсекунды заняла внутренняя оптимизация кода на Brainfuck, которую делает мой интерпретатор, а 1.7 секунды выполнялся код на Brainfuck.
Как видно у Chrome не всё хорошо с JavaScript.
Комментарии 18
можешь сделать тест в свежем webkit? очень интересно как он себя покажет
1) открываешь интерпретатор bf ( http://bf.kzn.ru/bfi.htm )
2) пишешь там «e pi.b», Enter
3) появляется текстовое поле, копируешь туда программу вычисления Пи ( http://bf.kzn.ru/program/pi.b ), жмёшь «Shift+[»
4) пишешь «r pi.b v», через несколько секунд видишь результат
Естественно, сравнивать браузеры надо на одной и той же машине
Firefox 3.1b2pre: 993 + JIT (358) = 1351
Safari 3.1: 1563 + JIT (378) = 1941
Opera 9.6: 2210 + JIT (1160) = 3370
В FF3.1 JIT в JavaScript включен?
Opera 9.23b8808: 3625 + JIT (7281) = 10906.
FireFox 2.0.016: 19625 + JIT (750) = 20375.
Обе версии Windows, на одной машине, несколько запусков подряд (результаты повторяемые)
Абсолютные величины не важны (пусть комп тормозной), но онлайн приложения типа Google.Reader, Mail.Yahoo, GMail субъективно на Opere тормозят от жить невозможно (Yahoo) до сильно торомозит (GMail). Тогда как на FireFox никаких отрицательных впечатлений.
Ну вот видимо об этом и говорил “aru”. Что математика быстрая, но на скорость работы реальных скриптов оказывают влияние другие факторы.
Принцип «Работает — не трожь»
включен
в новом webkit просто тоже jit ;)
Тем не менее, FF3.1 бьёт Chrome и по математике и по взаимодействию с DOM.
По теме: http://ejohn.org/blog/javascript-performance-rundown/
Второе. Boris Zbarsky пишет в комментариях, что тоже самое и с DOM — кусок вокруг вызова DOMa не JIT' итися, но «This situation is not planned to persist for long.»
Вроде обещают поправить к релизу 3.1
Ну и естественно, про рекурсию в трэйсманки там сказано.