Такое положение вещей заставляло многих переходить на хром, а кто не хотел — искал пути решения в виде разного рода оптимизаций, которые по большому счёту из-за нелогичного подхода распределения потоков или банального желания настрочить что-то в блог просто усугубляли ситуацию. Теперь один процесс должен был не просто работать, а очень быстро работать! В конечном итоге и разработчики сами прекрасно понимали, что одно дело — мало памяти, другое — низкая скорость работы, которая в основном оправдана старыми связками с XUL. На деле: открываем в Firefox несколько вкладок сразу, скролим их и в момент загрузки видим, что все тормозит — ни о каком плавном серфинге речи быть не могло.
«Мозилла» начала проект Electrolysis для адаптации движка «Гекко» к использованию нескольких процессов. Что вынуждает «Мозиллу» переключаться на подобную модель построения своего браузера? В первую очередь, это производительность и отзывчивость. Основной целью является уменьшение подвисания (jank), проявляющегося при стандартных операциях — загрузке особенно крупной страницы, наборе текста в веб-форме или прокрутке перегруженной элементами страницы.
Предлагаю воспользоваться новыми функциями многопроцессорной модели (к сожалению, по умолчанию они отключены, так как еще в разработке). Все функции проверены самим автором, и их значения подобраны для максимально быстрой и стабильной работы. Основной упор сделан на производительность и отзывчивость Firefox в условиях агрессивного серфинга. Потребление памяти в сравнении с однопроцессным режимом должно вырасти где-то на 12%-17% с учетом форсированного использования аппаратного ускорения, а без него не более, чем на 10%.
Так как проект только развивается и не является полностью стабильным, редактируйте в новом профиле а потом сравните результат. Ссылаться на свои результаты считаю неуместным, из-за сырости проекта. Результаты просто-напросто могут разниться кардинально.
Оптимизация
Применимо на всех версиях выше 44betaВнимание.Применимо на всех версиях выше 44 на канале обновления «beta». Дело в том что часть кода новых функций просто напросто не будет на Firefox с каналом обновления иным от beta или developer, в целях сохранения стабильности.
Для изменения канала обновления нужно заменить строку «realise» на «beta» в файле channel-prefs.js. Файл расположен в вашей папке :Firefox/defaults/pref
Возможна не совместимость с некоторыми дополнениями.
Правим about:config:
browser.tabs.remote.autostart browser.tabs.remote.autostart.1 browser.tabs.remote.autostart.2 — true layers.async-pan-zoom.enabled — true dom.ipc.plugins.asyncInit — true (асинхронность плагинов) javascript.options.asyncstack;true layers.acceleration.force-enabled = true (отключить при проблемах с видео) network.http.max-connections = 512 network.http.pipelining = true network.http.pipelining.aggressive = true network.http.pipelining.max-optimistic-requests = 32 network.http.pipelining.maxrequests = 96 network.http.pipelining.maxsize = 600000 network.http.pipelining.ssl = true network.http.proxy.pipelining = true browser.cache.use_new_backend - 1 (новая система кеширования) memory.free_dirty_pages — true browser.tabs.animate = false image.cache.timeweight = 100 browser.display.show_image_placeholders - false nglayout.initialpaint.delay;0 (создать целое) browser.display.auto_quality_min_font_size - (-1)
Убрать рамку обводящую ссылку во время клика:
browser.display.focus_ring_on_anything (Логическое) = false browser.display.focus_ring_width (Целое) = 0
Защита
network.dns.disableIPv6 - false network.dns.disablePrefetch - true network.predictor.enabled - false network.predictor.cleaned-up - true network.prefetch-next — false browser.send_pings — false network.http.speculative-parallel-limit - 0 (ноль) privacy.trackingprotection.enabled;true (защита от жучков) browser.safebrowsing.enabled;false browser.safebrowsing.malware.enabled;false datareporting.healthreport.service.enabled;false browser.safebrowsing.downloads.remote.enabled;false extensions.blocklist.enabled - false extensions.getAddons.cache.enabled - false browser.chrome.toolbar_tips — false media.video_stats.enabled - false dom.battery.enabled - false media.peerconnection.enabled=false
Устройства
dom.gamepad.enabled;false dom.vr.oculus.enabled;false dom.vibrator.enabled
Отключить Hello
loop.enabled;false
Реклама и снипеты Firefox
browser.newtabpage.directory.ping — оставить пустую строку browser.newtabpage.directory.source — оставить пустую строку browser.aboutHomeSnippets.updateUrl — оставить пустую строку
Теперь качество работы повыситься в разы. Удачи.
Комментарии (49)
VioletGiraffe
01.02.2016 14:50+12А ведь ФФ был последним нормальным браузером, который не спавнил 100500 процессов, и жрал память в разумных пределах, а не как Хром. Очень жаль, я теперь даже не знаю, на какой браузер переходить.
P. S. Наверное, не мультипроцессорный, а мультипроцессный?BupycNet
01.02.2016 14:55Так это реально проблема. Я вообще не знаю что с ним под линуксом случилось, но если в хроме вс ненормально загружаемых то FF визуально в 10 раз хуже работает, и почему то у меня лично CSS анимации с какими то артефактами идут.
VioletGiraffe
01.02.2016 15:58Под Линуксом я редко ФФ пользуюсь, а вот под виндой я как раз с браузере провожу очень много времени, и пожаловаться не на что.
snp
01.02.2016 16:03+1Для хрома есть удобное раширение The Great Suspender, выгружающее фоновые табы из памяти.
Cheater
01.02.2016 14:54+8>многопроцессорный
Многопроцессный мб? Я думаю, что там имелось в виду multithreaded.
> Мозилла
> Гекко
Mozilla, Gecko. Транслитерация здесь не оправдана.
> подвисания (jank)
Первый раз слышу про такой перевод слова «подвисание». До этого встречал только hang или freeze.klirichek
01.02.2016 17:43multithreaded это всё же совсем не то, что многопроцессный.
Треды — в пределах одного процесса. Один тред упал = упало всё приложение.
(хотя по существу, видимо, всё же многопоточность. Покуда речь об устранении подтормаживания за счёт распараллеливания, а не об увеличении стабильности. Т.е. неважно, крутятся ли эти дополнительные треды в том же процессе, или в другом)
jank — это скорее «подтормаживание». Когда из-за проблем «внутри» начинает тупить интерфейс. В общем-то, это и есть «подвисание», только кратковременное, но при этом периодически возникающее.
23rd
01.02.2016 16:46+1Я не в курсе, FF по итогу будут отказываться от XUL?
ZoomLS
01.02.2016 17:08Да. Будет переход на WebExtensions API.
23rd
01.02.2016 17:14Так это значит всё широкое множество расширений, с помощью которых можно было менять интерфейс браузера как угодно, перестанет работать, и останется лишь обрезанный API как в хроме?
Alexufo
01.02.2016 18:05это ппц но похоже на то. Я вот не понимаю, какой смысл от одинаковых API для расширений в разных браузерах? Смысл тогда в разных браузерах?
Alexey2005
01.02.2016 17:16+5Разницы не заметил.
Вообще, при переходе с Chrome на FF люди испытывают примерно те же чувства, что и при переходе с iOS на Android — всё никак не удаётся избавиться от чувства неповоротливости интерфейса, т.к. вне зависимости от количества памяти, ядер и гигагерц UI периодически подтормаживает — между вводом команды и её обработкой то и дело возникают вполне ощутимые задержки. Фанаты Android (и FF) давно к ним привыкли и даже не замечают, но при переходе с другой системы они ох как заметны для тех, кто привык к совсем другому уровню отзывчивости.
Причина в изначально кривой архитектуре. У пользовательского потока должен быть приоритет. Сперва обработай пользовательский ввод и прорисовку, а уж потом занимайся парсингом и прочими важными делами.
В Firefox же… А впрочем, лучше один раз увидеть, чем 100 раз прочитать. Создаём простейшую страничку вида:
<!doctype html> <html> <head></head> <body> <script> do {} while (true); </script> </body> </html>
и загружаем в FF, предварительно убедившись, что там не стоит NoScript, uMatrix и тому подобных плагинов, блокирующих JS. Результат потрясает в плохом смысле этого слова.
Браузер подвисает весь. Полностью. Вы не сможете ни переключить вкладку, ни закрыть только что открытую, ни выйти в меню браузера. Да что там меню, умирает даже поток прорисовки — если перекрыть окно FF чем-то ещё, изображение спокойно затирается. Всё, что вам остаётся — грустно смотреть на часы в ожидании появления окошка «этот сценарий не отвечает».
Да это же просто кошмар! Уже в начале 2000-х люди научились даже в одном процессе, даже в одном потоке ухитряться обрабатывать прорисовку и пользовательский ввод при выполнении каких-то тяжёлых вычислений. В простейшем случае достаточно воткнуть внутри основного рабочего цикла что-то вроде processMessages(); if (isStopButtonPressed) return 0;
Firefox в плане своей архитектуры так и остался в прошлом тысячелетии. И Chrome, и даже многократно обруганный MS Edge, переваривают вышеприведённый пример без малейших проблем.Desem
01.02.2016 19:16ой да ладно Вам, сделать для JS отдельный процесс как уже сделали в свое время для плагинов и все будет замечательно
Alexey2005
01.02.2016 20:28+1Это не решит проблему. Вынесут в отдельный поток JS — будет тормозить за счёт, к примеру css, на котором сейчас тоже можно FF подвесить и который так развился, что мне даже попадались игры, написанные без единой строчки JS.
Вынесут CSS — будет тормозить парсинг. Или загрузка. Или обработка сложных изображений, тут особенно svg с кучей фильтров отличается.
Поэтому выносить нужно в первую очередь UI. Пользователь должен скроллить, переключать вкладки, лазить по меню без малейших подтормаживаний, даже если всё остальное подвисло. И должен иметь возможность закрыть любую вкладку, если она ушла в глубокую задумчивость.
Вынеся в отдельный поток UI, мы тем самым заметаем проблему тормозов под ковёр — подтормаживания станут практически незаметными.
И в Mozilla это понимают. Но там код UI слишком уж сильно завязан с механизмами плагинов/дополнений, так что практически не поддаётся отделению. Отсюда и их последнее решение отказаться от старого механизма дополнений, т.к. там проще выкинуть всё и переписать заново, чем как-то отрефакторить.rshadow
01.02.2016 23:01-2Вообщем из всего прочитанного понял одно: надо сжалиться над разрабами ФФ и переходить на хром. Тот самый случай когда большинство пользователей, в своем бесхистростном порыве забить на тормозящие браузеры, реально правы.
VEG
01.02.2016 20:18+1Таков груз совместимости у Firefox. Весь JS работает в один поток. Абсолютно весь. JS всех вкладок и самого интерфейса браузера. Вот от этого и собираются много лет отказаться, но это ломает совместимость с большинством расширений. Поэтому и тянут так долго.
alexgog
01.02.2016 22:07Простите. Забыл кусок текста, так как сам постоянно в бете)
Внимание.Применимо на всех версиях выше 44 на канале обновления «beta». Дело в том что часть кода новых функций просто напросто не будет на Firefox с каналом обновления иным от beta или developer, в целях сохранения стабильности.
Для изменения канала обновления нужно заменить строку «realise» на «beta» в файле channel-prefs.js. Файл расположен в вашей папке :Firefox/defaults/pref
TheEvil
01.02.2016 23:53А впрочем, лучше один раз увидеть, чем 100 раз прочитать.
Точно. Вот чистая лиса 45, и ничего этого не происходит.
bodqhrohro
01.02.2016 23:09От многопроцессности на немощном железе только рассинхрон при переключении вкладок между интерфейсом и вьюпортом появился, а так никаких видимых принципиальных изменений. И настоящей многопроцессностью что-то не пахнет; ну есть процесс Web Content, который жрёт памяти примерно на равных с основным — но я его вроде видел и раньше. Так что это не многопроцессность, как в Chrome, а либо двупроцессность, как в Safari (Safari + Webkit2WebProcess), либо просто добавили многопоточность, а настоящую многопроцессность завезут аж с переходом на Servo. Сижу на альфа-ветке (Aurora; из официальных билдов, поговаривают, эту ветку уже выкинули, но на packages.debian.net по-прежнему есть), пробовал включать ещё с 42, тогда жуткий глюкодром был; сейчас 45, в целом юзабельно, хоть и некоторые расширения отвалились, но в однопроцессном режиме лучше.
alexgog
02.02.2016 00:46«От многопроцессности на немощном железе только рассинхрон при переключении вкладок между интерфейсом и вьюпортом появился, а так никаких видимых принципиальных изменений. И настоящей многопроцессностью что-то не пахнет»
— вы не совсем правильно понимаете, собственно как и многие в чем разница.
«много процессный» — одинаковые по значению но независимые друг от друга процессы.
«мульти процессорный» — один процесс, асинхронно распределяет нагрузку на количество ядер распараллеливая поток как следствие нагрузку в целом, не выделяя: одна вкладка — один процесс.
Ситуация с firefox не такая как у chromium, упор сделан на не повторение ошибок и проблем с которыми сталкиваются пользователи второго, при этом не ограничивая а скорее расширяя возможность выбора.
По этому, на данный момент, лисичка не «многопроцессный», к счастью.
если слабое железо, то — нетребовательный софт, тем более — браузер.
программа всего лишь говорит что и как сделать, если железо не в состоянии справиться, то глупо требовать результат от софта
SerCe
02.02.2016 00:58Измените заголовок на «многопроцессный», не путайте читателей!
alexgog
02.02.2016 05:29и чем запутал? в анг. «мульти» и «много» синонимы, но применяются в разных значения, в данном — только «мульти». Получается firefox давно «многопроцессный», firefox + plugin container (уже 2, а значит много, достаточно относительно).То, о чем вы говорите это новый движок servo.
Botkin
02.02.2016 09:29+1Автор, ты конфиг-то исправил в посте, молодец. Только я теперь не помню какие параметры на что менял. Дай старый конфиг, пожалуйста
alexgog
02.02.2016 10:02только добавил browser.tabs.remote.autostart 1. 2 (true)
если не уверены в значениях сбросте (пкм на флаг, в меню сбросить)
apollo2k4
02.02.2016 10:33+1Это конечно моё субъективное мнение – отключение SafeBrowsing плохая идея, точнее выиграшь от этого будет никакой, а когда никогда оно поможет.
Botkin
Спасибо!
Botkin
Правда, что-то я мало заметил эффект. По крайней мере, «на глаз» всё те же подвисания мерзкие при загрузке тяжёлой страницы
VEG
Скорее всего настройка просто не активировалась по каким-то причинам. Я попробовал на Firefox 45 включить browser.tabs.remote.autostart — но судя по всему, оно не включилось (никаких дополнительных процессов не появилось). Возможно, оно определяет наличие несовместимых дополнений и молча не включает эту фишку.
a553
Правильная опция
browser.tabs.remote.autostart.2
alexgog — стоит исправить в посте.
alexgog
browser.tabs.remote.autostart — стоит в 44 стабильной, ее можно скинуть на поток в бету, отключив обновления браузера, тем самым использовать стабильную версию лисы + пользоваться фишками беты)
browser.tabs.remote.autostart.1
browser.tabs.remote.autostart.2
применимы на 45 бета, но там сейчас уйма проблем с видео, неправильно кеширует содержимое, и может тормозить разное HD
a553
Вот потому что вы такой химией занимаетесь, у вас и кеширование не работает, и видео тормозит. :)
Я щас на 45, 46 и 47 на разных машинах, единственная проблема — регрессия в 47 с загрузкой файлов.
alexgog
та нет) кеш работает отлично в 44, но 45 и 46 под debian сливают их параллельно (вместо одного потока на видео их 2 или 3 и все одновременно), может с железом что то не то, но компиляция с флагами из mozilla
VEG
Спасибо за подсказку. Для всех трёх опций поставил true. Появился ещё один plugin-container.exe.
Мои расширения не отвалились (по крайней мере не заметил такого). Потестировал и немного расстроен.
1. Процесс рендеринга имеет Integrity=Medium, то есть он всё ещё имеет кучу прав, и в случае взлома браузера от имени этого процесса всё ещё можно натворить дел без сопротивления со стороны ОС. То есть цель «повысить безопасность» по крайней мере в 45b1 пока что не выполняется.
2. Запустил тяжёлую страницу с длинным циклом, который подвешивает страницу на несколько секунд. Браузер тоже почему-то подвис, как и без вынесения выполнения страниц в отдельный процесс.
Возможно, из-за обилия расширений у меня включился какой-то режим совместимости, который заставляет UI браузера работать синхронно со страницами, имитируя старое однопоточное выполнение всего JS на страницах и в интерфейсе браузера. Это просто предположение, точно я не знаю. Будем ждать релиза этой возможности и оценивать уже окончательный вариант.
alexgog
проверьте так, запустите браузер в «приватном режиме», там реально увидите как работают внесенные изменения (проблема возможно, а так скорее всего и есть — в дополнениях), лично у меня отзывчивость такая же как у хрома, хотя железо нетбук asus eee pc 1011px 2gb, и никаких задержек при открытии сразу, более 20 вкладок, прорисовывает и отзывается.Схема описанная проверена много раз, лично.
alexgog
Простите. Забыл кусок текста, так как сам постоянно в бете)
Внимание.Применимо на всех версиях выше 44 на канале обновления «beta». Дело в том что часть кода новых функций просто напросто не будет на Firefox с каналом обновления иным от beta или developer, в целях сохранения стабильности.
Для изменения канала обновления нужно заменить строку «realise» на «beta» в файле channel-prefs.js. Файл расположен в вашей папке :Firefox/defaults/pref