Так уж сложилось, что Firefox использует однопроцессную модель, и реальность такова, что такой подход с учётом динамики развития сети и частичной связки с XUL вызывает, мягко говоря, много неудобств. Один процесс должен обрабатывать несколько потоков, что очень сильно сказывается на производительности браузера в целом. Отзывчивость Firefox оставляла желать лучшего, когда тот же Google Chrome прекрасно рендерил тяжёлые страницы, что никак не сказывалось на производительности других вкладок.

Такое положение вещей заставляло многих переходить на хром, а кто не хотел — искал пути решения в виде разного рода оптимизаций, которые по большому счёту из-за нелогичного подхода распределения потоков или банального желания настрочить что-то в блог просто усугубляли ситуацию. Теперь один процесс должен был не просто работать, а очень быстро работать! В конечном итоге и разработчики сами прекрасно понимали, что одно дело — мало памяти, другое — низкая скорость работы, которая в основном оправдана старыми связками с 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)


  1. Botkin
    01.02.2016 14:44

    Спасибо!


    1. Botkin
      01.02.2016 15:05
      +1

      Правда, что-то я мало заметил эффект. По крайней мере, «на глаз» всё те же подвисания мерзкие при загрузке тяжёлой страницы


      1. VEG
        01.02.2016 21:59

        Скорее всего настройка просто не активировалась по каким-то причинам. Я попробовал на Firefox 45 включить browser.tabs.remote.autostart — но судя по всему, оно не включилось (никаких дополнительных процессов не появилось). Возможно, оно определяет наличие несовместимых дополнений и молча не включает эту фишку.


        1. a553
          01.02.2016 22:18

          Правильная опция browser.tabs.remote.autostart.2

          alexgog — стоит исправить в посте.


          1. alexgog
            01.02.2016 22:28

            browser.tabs.remote.autostart — стоит в 44 стабильной, ее можно скинуть на поток в бету, отключив обновления браузера, тем самым использовать стабильную версию лисы + пользоваться фишками беты)

            browser.tabs.remote.autostart.1
            browser.tabs.remote.autostart.2
            применимы на 45 бета, но там сейчас уйма проблем с видео, неправильно кеширует содержимое, и может тормозить разное HD


            1. a553
              01.02.2016 22:30

              Вот потому что вы такой химией занимаетесь, у вас и кеширование не работает, и видео тормозит. :)

              Я щас на 45, 46 и 47 на разных машинах, единственная проблема — регрессия в 47 с загрузкой файлов.


              1. alexgog
                01.02.2016 22:37

                та нет) кеш работает отлично в 44, но 45 и 46 под debian сливают их параллельно (вместо одного потока на видео их 2 или 3 и все одновременно), может с железом что то не то, но компиляция с флагами из mozilla


          1. VEG
            02.02.2016 12:03

            Спасибо за подсказку. Для всех трёх опций поставил true. Появился ещё один plugin-container.exe.
            image

            Мои расширения не отвалились (по крайней мере не заметил такого). Потестировал и немного расстроен.
            1. Процесс рендеринга имеет Integrity=Medium, то есть он всё ещё имеет кучу прав, и в случае взлома браузера от имени этого процесса всё ещё можно натворить дел без сопротивления со стороны ОС. То есть цель «повысить безопасность» по крайней мере в 45b1 пока что не выполняется.
            2. Запустил тяжёлую страницу с длинным циклом, который подвешивает страницу на несколько секунд. Браузер тоже почему-то подвис, как и без вынесения выполнения страниц в отдельный процесс.

            Возможно, из-за обилия расширений у меня включился какой-то режим совместимости, который заставляет UI браузера работать синхронно со страницами, имитируя старое однопоточное выполнение всего JS на страницах и в интерфейсе браузера. Это просто предположение, точно я не знаю. Будем ждать релиза этой возможности и оценивать уже окончательный вариант.


            1. alexgog
              02.02.2016 19:51
              -1

              проверьте так, запустите браузер в «приватном режиме», там реально увидите как работают внесенные изменения (проблема возможно, а так скорее всего и есть — в дополнениях), лично у меня отзывчивость такая же как у хрома, хотя железо нетбук asus eee pc 1011px 2gb, и никаких задержек при открытии сразу, более 20 вкладок, прорисовывает и отзывается.Схема описанная проверена много раз, лично.


    1. alexgog
      01.02.2016 22:06

      Простите. Забыл кусок текста, так как сам постоянно в бете)

      Внимание.Применимо на всех версиях выше 44 на канале обновления «beta». Дело в том что часть кода новых функций просто напросто не будет на Firefox с каналом обновления иным от beta или developer, в целях сохранения стабильности.
      Для изменения канала обновления нужно заменить строку «realise» на «beta» в файле channel-prefs.js. Файл расположен в вашей папке :Firefox/defaults/pref


  1. VioletGiraffe
    01.02.2016 14:50
    +12

    А ведь ФФ был последним нормальным браузером, который не спавнил 100500 процессов, и жрал память в разумных пределах, а не как Хром. Очень жаль, я теперь даже не знаю, на какой браузер переходить.

    P. S. Наверное, не мультипроцессорный, а мультипроцессный?


    1. BupycNet
      01.02.2016 14:55

      Так это реально проблема. Я вообще не знаю что с ним под линуксом случилось, но если в хроме вс ненормально загружаемых то FF визуально в 10 раз хуже работает, и почему то у меня лично CSS анимации с какими то артефактами идут.


      1. VioletGiraffe
        01.02.2016 15:58

        Под Линуксом я редко ФФ пользуюсь, а вот под виндой я как раз с браузере провожу очень много времени, и пожаловаться не на что.


      1. semmaxim
        01.02.2016 16:33

        Что-то с аппаратным ускорением, похоже. Попробуйте его отключить на обоих.


    1. a553
      01.02.2016 15:50

      Пока всё настраивается.


    1. snp
      01.02.2016 16:03
      +1

      Для хрома есть удобное раширение The Great Suspender, выгружающее фоновые табы из памяти.


  1. Cheater
    01.02.2016 14:54
    +8

    >многопроцессорный
    Многопроцессный мб? Я думаю, что там имелось в виду multithreaded.

    > Мозилла
    > Гекко
    Mozilla, Gecko. Транслитерация здесь не оправдана.

    > подвисания (jank)
    Первый раз слышу про такой перевод слова «подвисание». До этого встречал только hang или freeze.


    1. klirichek
      01.02.2016 17:43

      multithreaded это всё же совсем не то, что многопроцессный.
      Треды — в пределах одного процесса. Один тред упал = упало всё приложение.
      (хотя по существу, видимо, всё же многопоточность. Покуда речь об устранении подтормаживания за счёт распараллеливания, а не об увеличении стабильности. Т.е. неважно, крутятся ли эти дополнительные треды в том же процессе, или в другом)

      jank — это скорее «подтормаживание». Когда из-за проблем «внутри» начинает тупить интерфейс. В общем-то, это и есть «подвисание», только кратковременное, но при этом периодически возникающее.


    1. Ptica79
      05.02.2016 15:23

      Я бы вообще сказал бы многопоточный.


  1. 23rd
    01.02.2016 16:46
    +1

    Я не в курсе, FF по итогу будут отказываться от XUL?


    1. ZoomLS
      01.02.2016 17:08

      Да. Будет переход на WebExtensions API.


      1. 23rd
        01.02.2016 17:14

        Так это значит всё широкое множество расширений, с помощью которых можно было менять интерфейс браузера как угодно, перестанет работать, и останется лишь обрезанный API как в хроме?


        1. Alexufo
          01.02.2016 18:05

          это ппц но похоже на то. Я вот не понимаю, какой смысл от одинаковых API для расширений в разных браузерах? Смысл тогда в разных браузерах?



  1. 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, переваривают вышеприведённый пример без малейших проблем.


    1. Desem
      01.02.2016 19:16

      ой да ладно Вам, сделать для JS отдельный процесс как уже сделали в свое время для плагинов и все будет замечательно


      1. Alexey2005
        01.02.2016 20:28
        +1

        Это не решит проблему. Вынесут в отдельный поток JS — будет тормозить за счёт, к примеру css, на котором сейчас тоже можно FF подвесить и который так развился, что мне даже попадались игры, написанные без единой строчки JS.
        Вынесут CSS — будет тормозить парсинг. Или загрузка. Или обработка сложных изображений, тут особенно svg с кучей фильтров отличается.
        Поэтому выносить нужно в первую очередь UI. Пользователь должен скроллить, переключать вкладки, лазить по меню без малейших подтормаживаний, даже если всё остальное подвисло. И должен иметь возможность закрыть любую вкладку, если она ушла в глубокую задумчивость.
        Вынеся в отдельный поток UI, мы тем самым заметаем проблему тормозов под ковёр — подтормаживания станут практически незаметными.
        И в Mozilla это понимают. Но там код UI слишком уж сильно завязан с механизмами плагинов/дополнений, так что практически не поддаётся отделению. Отсюда и их последнее решение отказаться от старого механизма дополнений, т.к. там проще выкинуть всё и переписать заново, чем как-то отрефакторить.


        1. rshadow
          01.02.2016 23:01
          -2

          Вообщем из всего прочитанного понял одно: надо сжалиться над разрабами ФФ и переходить на хром. Тот самый случай когда большинство пользователей, в своем бесхистростном порыве забить на тормозящие браузеры, реально правы.


    1. VEG
      01.02.2016 20:18
      +1

      Таков груз совместимости у Firefox. Весь JS работает в один поток. Абсолютно весь. JS всех вкладок и самого интерфейса браузера. Вот от этого и собираются много лет отказаться, но это ломает совместимость с большинством расширений. Поэтому и тянут так долго.


    1. alexgog
      01.02.2016 22:07

      Простите. Забыл кусок текста, так как сам постоянно в бете)

      Внимание.Применимо на всех версиях выше 44 на канале обновления «beta». Дело в том что часть кода новых функций просто напросто не будет на Firefox с каналом обновления иным от beta или developer, в целях сохранения стабильности.
      Для изменения канала обновления нужно заменить строку «realise» на «beta» в файле channel-prefs.js. Файл расположен в вашей папке :Firefox/defaults/pref


    1. achekalin
      01.02.2016 22:25

      А я вот никак не дождусь поддержки Ctrl+Tab в Хроме. Сильно не хватает.


    1. TheEvil
      01.02.2016 23:53

      А впрочем, лучше один раз увидеть, чем 100 раз прочитать.

      Точно. Вот чистая лиса 45, и ничего этого не происходит.


  1. nosuchip
    01.02.2016 21:18
    +1

    Открываю Firefox, открываю в нем двадцать вкладок с webm. Что? Опять тормозит? Значит для меня, как для пользователя новая версия ничего не принесла.


    1. alexgog
      01.02.2016 22:43
      -1

      странно, какая версия лисы?


    1. TheEvil
      01.02.2016 23:58
      +1

      ~170 вкладок, большинство спят, всё вместе занимает ~1.2GB RAM, отзывчивость отличная:
      image


  1. bodqhrohro
    01.02.2016 23:09

    От многопроцессности на немощном железе только рассинхрон при переключении вкладок между интерфейсом и вьюпортом появился, а так никаких видимых принципиальных изменений. И настоящей многопроцессностью что-то не пахнет; ну есть процесс Web Content, который жрёт памяти примерно на равных с основным — но я его вроде видел и раньше. Так что это не многопроцессность, как в Chrome, а либо двупроцессность, как в Safari (Safari + Webkit2WebProcess), либо просто добавили многопоточность, а настоящую многопроцессность завезут аж с переходом на Servo. Сижу на альфа-ветке (Aurora; из официальных билдов, поговаривают, эту ветку уже выкинули, но на packages.debian.net по-прежнему есть), пробовал включать ещё с 42, тогда жуткий глюкодром был; сейчас 45, в целом юзабельно, хоть и некоторые расширения отвалились, но в однопроцессном режиме лучше.


  1. alexgog
    02.02.2016 00:46

    «От многопроцессности на немощном железе только рассинхрон при переключении вкладок между интерфейсом и вьюпортом появился, а так никаких видимых принципиальных изменений. И настоящей многопроцессностью что-то не пахнет»
    — вы не совсем правильно понимаете, собственно как и многие в чем разница.
    «много процессный» — одинаковые по значению но независимые друг от друга процессы.
    «мульти процессорный» — один процесс, асинхронно распределяет нагрузку на количество ядер распараллеливая поток как следствие нагрузку в целом, не выделяя: одна вкладка — один процесс.
    Ситуация с firefox не такая как у chromium, упор сделан на не повторение ошибок и проблем с которыми сталкиваются пользователи второго, при этом не ограничивая а скорее расширяя возможность выбора.
    По этому, на данный момент, лисичка не «многопроцессный», к счастью.

    если слабое железо, то — нетребовательный софт, тем более — браузер.
    программа всего лишь говорит что и как сделать, если железо не в состоянии справиться, то глупо требовать результат от софта


  1. SerCe
    02.02.2016 00:58

    Измените заголовок на «многопроцессный», не путайте читателей!


    1. alexgog
      02.02.2016 05:29

      и чем запутал? в анг. «мульти» и «много» синонимы, но применяются в разных значения, в данном — только «мульти». Получается firefox давно «многопроцессный», firefox + plugin container (уже 2, а значит много, достаточно относительно).То, о чем вы говорите это новый движок servo.


      1. SerCe
        02.02.2016 09:25

        В оригинале (для примера возьмем любой) multi-process, multi-process = многопроцессный, а не «многопроцессорный» ваш заголовок звучит как будто добавили какую-либо оптимизацию специально для поддержки нескольких процессоров.


        1. alexgog
          02.02.2016 10:20

          Спасибо что поправили. Только с утра понял о чем речь)


  1. SerCe
    02.02.2016 09:25

    ()


  1. Botkin
    02.02.2016 09:29
    +1

    Автор, ты конфиг-то исправил в посте, молодец. Только я теперь не помню какие параметры на что менял. Дай старый конфиг, пожалуйста


  1. alexgog
    02.02.2016 10:02

    только добавил browser.tabs.remote.autostart 1. 2 (true)
    если не уверены в значениях сбросте (пкм на флаг, в меню сбросить)


  1. apollo2k4
    02.02.2016 10:33
    +1

    Это конечно моё субъективное мнение – отключение SafeBrowsing плохая идея, точнее выиграшь от этого будет никакой, а когда никогда оно поможет.