Некоторые power-юзеры начинают день с дефолтного конфига в 40-50 открытых вкладок. В течение дня к этой группе может прибавиться ещё пару десятков, а то и сотня. Хотя это крайне нестандартный поведенческий паттерн, но некоторые именно так и работают. Любопытно посмотреть, как ведут себя браузеры в подобной нештатной ситуации. Один из разработчиков Firefox, аспирант Грегор Вагнер, решил провести тесты на последних сборках Chrome и Firefox.
Вагнер разрабатывает различные стратегии распределения памяти для Firefox. В последних версиях Firefox разработчики значительно оптимизировали браузер в этом отношении.
150 сайтов взяты из списка самых популярных сайтов. Хабрахабр туда не вошёл, потому что занимает лишь 462-е место в мире по популярности.
Скрипт MemBench открывал по одной новой вкладке каждые 1,5 секунды. По достижении лимита в 150 вкладок он ждал 90 секунд, пока все страницы не загрузятся, и выводил текстовое сообщение об окончании теста. Тестовая машина: Dual-Core MacBook Pro с 8 ГБ RAM.
Для последнего билда Firefox Nightly (Firefox 8) получены следующие результаты:
real 6 мин 14,406 с
user 3 мин 55,302 с
sys 0 мин 49,366 с
Вот что показал canary-билд Chrome:
real 28 мин 55,573 с
user 21 мин 58,383 с
sys 14 мин 40,860 с
Как видим, разница просто огромная. Оказалось, что Chrome начинает с большим трудом открывать новые вкладки примерно после 70-й. На 150 сайтах Грегор даже не мог нормально скролить страничку. Firefox, в свою очередь, вёл себя вполне нормально, как будто и нет других открытых табов.
В чём же причина? Дело в том, что Firefox использует модель «один процесс — много ветвлений» (PDF), так что все 150 вкладок укладываются в 27 тредов и 2,02 ГБ RAM.
В Chrome используется противоположный подход, в котором задачи разбиваются по нескольким процессам. В результате процесс Google Chrome Renderer постоянно использует 100% CPU и занял 1,5 ГБ на 150 вкладках. Основной процесс Google Chrome использует 212 тредов и 1,3 ГБ. Есть ещё дополнительный процесс Helper с 200 МБ.
Вот результат выполнения бенчмарка V8 в Firefox на полной загрузке всех 150 страниц.
Firefox Score: 3954
Richards: 8014
DeltaBlue: 4149
Crypto: 8781
RayTrace: 3007
EarleyBoyer: 3112
RegExp: 959
Splay: 5764
Сравните с результатом при одной открытой вкладке:
Firefox Score: 5125
Richards: 7925
DeltaBlue: 5005
Crypto: 8791
RayTrace: 3976
EarleyBoyer: 5003
RegExp: 2188
Splay: 6120
Попытка запустить тест V8 на Chrome не удалась: браузер остановил рендеринг, процесс Google Chrome не опускался ниже 100% CPU.
Вывод от Грегора Вагнера: если вам нужно много вкладок, используйте Firefox! (Пользователи Opera могут не согласиться с таким выводом, говорят, этот браузер на удивление хорошо работает с большим количеством вкладок)
Вагнер разрабатывает различные стратегии распределения памяти для Firefox. В последних версиях Firefox разработчики значительно оптимизировали браузер в этом отношении.
150 сайтов взяты из списка самых популярных сайтов. Хабрахабр туда не вошёл, потому что занимает лишь 462-е место в мире по популярности.
Скрипт MemBench открывал по одной новой вкладке каждые 1,5 секунды. По достижении лимита в 150 вкладок он ждал 90 секунд, пока все страницы не загрузятся, и выводил текстовое сообщение об окончании теста. Тестовая машина: Dual-Core MacBook Pro с 8 ГБ RAM.
Для последнего билда Firefox Nightly (Firefox 8) получены следующие результаты:
real 6 мин 14,406 с
user 3 мин 55,302 с
sys 0 мин 49,366 с
Вот что показал canary-билд Chrome:
real 28 мин 55,573 с
user 21 мин 58,383 с
sys 14 мин 40,860 с
Как видим, разница просто огромная. Оказалось, что Chrome начинает с большим трудом открывать новые вкладки примерно после 70-й. На 150 сайтах Грегор даже не мог нормально скролить страничку. Firefox, в свою очередь, вёл себя вполне нормально, как будто и нет других открытых табов.
В чём же причина? Дело в том, что Firefox использует модель «один процесс — много ветвлений» (PDF), так что все 150 вкладок укладываются в 27 тредов и 2,02 ГБ RAM.
В Chrome используется противоположный подход, в котором задачи разбиваются по нескольким процессам. В результате процесс Google Chrome Renderer постоянно использует 100% CPU и занял 1,5 ГБ на 150 вкладках. Основной процесс Google Chrome использует 212 тредов и 1,3 ГБ. Есть ещё дополнительный процесс Helper с 200 МБ.
Вот результат выполнения бенчмарка V8 в Firefox на полной загрузке всех 150 страниц.
Firefox Score: 3954
Richards: 8014
DeltaBlue: 4149
Crypto: 8781
RayTrace: 3007
EarleyBoyer: 3112
RegExp: 959
Splay: 5764
Сравните с результатом при одной открытой вкладке:
Firefox Score: 5125
Richards: 7925
DeltaBlue: 5005
Crypto: 8791
RayTrace: 3976
EarleyBoyer: 5003
RegExp: 2188
Splay: 6120
Попытка запустить тест V8 на Chrome не удалась: браузер остановил рендеринг, процесс Google Chrome не опускался ниже 100% CPU.
Вывод от Грегора Вагнера: если вам нужно много вкладок, используйте Firefox! (Пользователи Opera могут не согласиться с таким выводом, говорят, этот браузер на удивление хорошо работает с большим количеством вкладок)