Сравнение производительности Javascript на Mozilla Firefox 3.5 (Linux)
Всем уже известно, что в новый Firefox 3.5 разработчики включили быстрый JavaScript-движок TraceMonkey. Утверждалось, что он разрывает в клочья V8, который используется в Google Chrome. Здесь уже пробегало достаточно постов по поводу того, насколько всё будет хорошо и замечательно, настало время это проверить :)
Вообще неплохо было бы проверить оригинальную заявку про разрывание в клочья V8 на Windows, но для начала я взял свой рабочий Gentoo Linux x86 на ThinkPad T61 (Core2Duo 2.0 Ghz / 2 GB RAM), несколько версий Firefox, Opera и последний билд Chromium, да классический Javascript-тест SunSpider.
Итак, что мы имеем по браузерам:
[*] У меня в /etc/make.conf по-умолчанию включены следующие оптимизации: "-O3 -march=prescott -fomit-frame-pointer -fexpensive-optimizations -pipe". Пакеты, правда, вправе их проигнорировать.
Каждый тест запускался в «чистом» окружении: запущен только KDE, все посторонние процессы выгружены, браузер был единственным открытым приложением, в браузере открыт только SunSpider. Перед запуском каждого браузера проверялась 0% CPU активность в течении минуты. Браузеры стартовали с настройками по-умолчанию, с новыми профилями.
Для начала картинка для привлечения внимания. Общий результат:

SunSpider измеряет время исполнения, поэтому чем меньше время, тем лучше. Видно, что производительность FF действительно выросла, причём значительно! Opera повела себя вообще странно, а Chromium вырвался вперёд. В принципе, на этом можно было бы и закончить, остальная часть поста только детализирует эту картинку.
Для удобства нормализуем по FF 3.0.11:

Видно, что прирост производительности зашкалил за 100%, т.е. больше чем в два раза. Chromium был быстрее в 6(!) раз.
Пробежимся по каждой группе тестов в отдельности, всё ещё нормализуем по FF 3.0.11:

Видно, что изменения коснулись каждого из тестов, кроме controlflow. Практически на каждом из них наблюдаются приросты минимум два раза, а на некоторых и в семь раз.
Хорошо, FF 3.0.11 уже не конкурент, оставим его в покое, нормализуем теперь по самой быстрой версии FF 3.5:

А Chromium с его V8 всё ещё в 2.5 раза быстрее.
Опять же, подробнее по тестам:

По этой картинке можно сказать, что FF с TraceMonkey только почти только догнал Chromium с V8 только на одном из тестов — bitops. Во всех остальных случаях Chromium уверенно побеждает.
За точными данными, расчётами и построением графиков можно обратиться в протокол эксперимента.Будет здорово, если кто-нибудь сможет взять машинку с установленной Windows XP / Vista и повторить этот эксперимент. Нужно будет только ввести числа (ну и лишние колонки посносить), всё остальное пересчитается и перестроится само.
UPD: Auren откликнулся и проверил это на Windows 7.
Напоследок disclaimer: этот эксперимент НЕ может являться доказательством тотального превосходства V8 над TraceMonkey. Товарищи из Mozilla/Google лучше знают, как измерять производительность своих продуктов. Показываю только то, что вижу на отдельно взятой системе, на отдельно взятом тесте. И да, FF 3.5 визуально гораздо быстрее :)
_________
Текст подготовлен в ХабраРедакторе (и допилен руками)
Вообще неплохо было бы проверить оригинальную заявку про разрывание в клочья V8 на Windows, но для начала я взял свой рабочий Gentoo Linux x86 на ThinkPad T61 (Core2Duo 2.0 Ghz / 2 GB RAM), несколько версий Firefox, Opera и последний билд Chromium, да классический Javascript-тест SunSpider.
Итак, что мы имеем по браузерам:
- Mozilla Firefox 3.0.11, собран из исходников с оптимизацией [*]. Буду использовать его как версию FF без TraceMonkey.
- Mozilla Firefox 3.5 (binary), скачан с сайта Mozilla. Буду использовать его как сборку без архитектурно-специфичных оптимизаций.
- Mozilla Firefox 3.5 (source), собран из оверлея с оптимизацией [*]. Хочу посмотреть, как влияет производительность самого TraceMonkey.
- Mozilla Firefox 3.5 (source + custom), собран из оверлея с оптимизацией [*] и выставленным флагом «custom-optimization».
- Opera 9.64, бинарная сборка, доступная из репозитория.
- Chromium 3.0.192.0 (19918), скачанный с сайта проекта Chromium. К сожалению, официального релиза Chrome под Linux нет, поэтому пришлось использовать ночной билд.
[*] У меня в /etc/make.conf по-умолчанию включены следующие оптимизации: "-O3 -march=prescott -fomit-frame-pointer -fexpensive-optimizations -pipe". Пакеты, правда, вправе их проигнорировать.
Каждый тест запускался в «чистом» окружении: запущен только KDE, все посторонние процессы выгружены, браузер был единственным открытым приложением, в браузере открыт только SunSpider. Перед запуском каждого браузера проверялась 0% CPU активность в течении минуты. Браузеры стартовали с настройками по-умолчанию, с новыми профилями.
Для начала картинка для привлечения внимания. Общий результат:

SunSpider измеряет время исполнения, поэтому чем меньше время, тем лучше. Видно, что производительность FF действительно выросла, причём значительно! Opera повела себя вообще странно, а Chromium вырвался вперёд. В принципе, на этом можно было бы и закончить, остальная часть поста только детализирует эту картинку.
Для удобства нормализуем по FF 3.0.11:

Видно, что прирост производительности зашкалил за 100%, т.е. больше чем в два раза. Chromium был быстрее в 6(!) раз.
Пробежимся по каждой группе тестов в отдельности, всё ещё нормализуем по FF 3.0.11:

Видно, что изменения коснулись каждого из тестов, кроме controlflow. Практически на каждом из них наблюдаются приросты минимум два раза, а на некоторых и в семь раз.
Хорошо, FF 3.0.11 уже не конкурент, оставим его в покое, нормализуем теперь по самой быстрой версии FF 3.5:

А Chromium с его V8 всё ещё в 2.5 раза быстрее.
Опять же, подробнее по тестам:

По этой картинке можно сказать, что FF с TraceMonkey только почти только догнал Chromium с V8 только на одном из тестов — bitops. Во всех остальных случаях Chromium уверенно побеждает.
За точными данными, расчётами и построением графиков можно обратиться в протокол эксперимента.
UPD: Auren откликнулся и проверил это на Windows 7.
Напоследок disclaimer: этот эксперимент НЕ может являться доказательством тотального превосходства V8 над TraceMonkey. Товарищи из Mozilla/Google лучше знают, как измерять производительность своих продуктов. Показываю только то, что вижу на отдельно взятой системе, на отдельно взятом тесте. И да, FF 3.5 визуально гораздо быстрее :)
_________
Текст подготовлен в ХабраРедакторе (и допилен руками)

комментарии (53)