- BrainTools - https://www.braintools.ru -

Хром и скорость

Подробное руководство по ускорению любимого браузера подручными средствами. В помощь домохозяюшкам, студентам и высшему руководству — всем у кого нет под рукой топового железа с 64Гб памяти [1] для работы в современном интернете.

В качестве демонстрации. FreeBSD и ноутбук 2007 года, но ниже будет и про ваши любимые Windows c Linux

В качестве демонстрации. FreeBSD и ноутбук 2007 года, но ниже будет и про ваши любимые Windows c Linux

❯ Хром

Браузер Chrome [2], созданный и разрабатываемый корпорацией Google давно стал главным инструментом для большинства пользователей компьютерной техники:

в вашем телефоне, планшете, телевизоре, ноутбуке и стационарном компьютере в подавляющем большинстве случаев будет установлен именно этот браузер, либо что-то на его основе.

Исключения редки, это продукция Apple со своим собственным браузером Safari [3], медленно умирающий Firefox [4] и совсем уж сказочная альтернативщина [5].

Два вечных конкурента в виде браузеров Opera [6] и Internet Explorer [7] сдались в попытке угнаться за прогрессом и ныне используют под капотом движок от Chrome.

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

Даже эта статья создавалась с помощью браузера Chrome:

Хром и скорость - 2

❯ Скорость

Конечно высокооплачиваемые разработчики самого популярного браузера на планете, щедро финансируемые «корпорацией добра [8]» — не полные идиоты и разбираются в вопросах производительности собственного продукта гораздо лучше автора.

Но только проблемы производительности на дешевом, устаревшем и тем более неподдерживаемом оборудовании сотрудников Google… мягко говоря не очень волнуют.

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

Применимость

Описываемые ниже инструкции — для десктопной версии браузера Chrome и с учетом специфики трех разных операционных систем: Windows, Linux и FreeBSD.

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

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

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

Производительность

Я использую браузер Chrome на ноутбуках с момента его появления и часто работаю «в поле» — от батареи и без подключения к розетке. Помимо браузера на машине постоянно присутствуют еще несколько тяжелых приложений — в первую очередь среды разработки и разнообразные редакторы.

Все это в итоге формирует следующий набор требований:

  1. браузер не должен нападать на человека забирать на себя все доступные ресурсы;

  2. браузер не должен «сжирать» батарею ноутбука;

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

Время «холодного запуска» и скорость отрисовки страниц при таких вводных разумеется могут пострадать, но будут оставаться в пределах разумного.

Версии и названия

Чтобы не было путаницы, стоит сразу прояснить ряд нюансов с названиями продуктов и используемыми терминами.

Официально браузер от Google называется «Chrome [2]» и поставляется (даже для Linux) в виде готовой сборки с инсталлятором, т.е. это закрытый коммерческий продукт, хотя и бесплатный для пользователя.

Именно эта версия доступна для скачивания с официального сайта и имеет максимальную интеграцию с сервисами и другими продуктами Google.

Открытая часть браузера Chrome называется «Chromium [9]» и с точки зрения [10] обычного пользователя никак не поставляется, поскольку Chromium предназначен в первую очередь для технических специалистов, участвующих в процессе разработки и тестирования.

Именно Chromium а не Chrome чаще всего установлен по-умолчанию в различных дистрибутивах Linux, в виде сборки от ментейнеров дистрибутива.

Наконец существует проект «Ungoogled Chromium [11]», авторы которого постарались удалить из Chromium абсолютно все интеграции с сервисами Google и все закрытые инструменты сборки.

Ungoogled Chromium за последние годы набрал популярность, поэтому активно используется в BSD-системах и дистрибутивах Linux, ориентированных на безопасность [12].

Поскольку использование сервисов Google в наше непростое время может приводить к непредсказуемым проблемам и сбоям подключения, я буду использовать для всех описываемых оптимизаций Ungoogled Chromium либо просто Chromium, но не официальный Google Chrome.

Тем не менее для простоты повествования, в статье используется термин «Chrome» в качестве обозначения браузера, поскольку описываемые методы оптимизации полностью совпадают и частично применимы и к другим браузерам на основе Chromium.

Тестовая среда

Для статьи использовались современные 64-битные сборки браузера, с версиями начиная с 147 и выше:

147.0.7727.101 (Official Build) (64-bit)

Ungoogled Chromium имеет свою собственную нумерацию версий, отличную от оригинальной, для этой статьи использовались версии 137 и выше:

Хром и скорость - 3

Под различными операционными системами использовались разные версии браузера, но во всех случаях — самые последние из доступных на момент написания статьи. Замечу также, что описанные оптимизации постоянно используются на всех моих ноутбуках, как мощных и современных, так и откровенно.. винтажных.

Поскольку разницу лучше всего видно на устаревшем оборудовании, в качестве тестовой среды будут использованы два настоящих «боевых пенсионера»:

Lenovo Z580, 2013 года

Lenovo Z580 [13], 2013 года
ASUS F3Ke, 2007 год

ASUS F3Ke [14], 2007 год

Эти весьма устаревшие по любым меркам (особенно второй) машины станут отличным тестовым полигоном для демонстрации результатов всех описываемых вивисекций оптимизаций.

❯ Оптимизация

Поскольку целевая аудитория статьи — обычные пользователи, не владеющие с пеленок компилятором и отладчиком, ограничусь тремя вариантами оптимизации браузера, доступными без залезания непосредственно в код:

хитрые настройки, хитрые плагины и хитрое окружение. 

Все ради того чтобы крутить ленту каких-нибудь Reddit/LinkedIn без зависания браузера и 100% загрузки процессора.

Так выглядит работа браузера со всеми оптимизациями на Ubuntu Linux и ноутбуке 2012 года

Так выглядит работа браузера со всеми оптимизациями на Ubuntu Linux и ноутбуке 2012 года

❯ Chrome и Linux

Так исторически сложилось, что я использую много разных Linux-дистрибутивов в своей непростой деятельности:

Debian [15], Ubuntu [16], Manjaro [17], Mageia [18], Calculate [19] — только то что установлено на железе, без виртуализации.

Сразу уточню, что Calculate Linux (на базе Gentoo) использует OpenRC [20] вместо systemd, поэтому трюк с systemd-run тут не используется, но все остальные инструкции отлично работают на всем этом зоопарке и по своей сути применимы для любого окружения на базе Linux, везде где есть браузер Chrome.

Начнем со скрипта запуска браузера, в котором специальными параметрами включаются или отключаются разные хитрые опции, а также используется специальное окружение:

#!/bin/bash

systemd-run --user --slice=chromium.slice chromium 
    --enable-features=VaapiVideoDecoder,VaapiVideoEncoder 
    --enable-gpu-rasterization 
    --disable-gpu-compositing 
    --enable-zero-copy 
    --disable-background-networking 
    --disable-client-side-phishing-detection 
    --disable-prompt-on-repost 
    --disable-sync 
    --metrics-recording-only 
    --no-first-run 
    --safebrowsing-disable-auto-update 
    --ignore-gpu-blocklist 
    --renderer-process-limit=4 
    --disable-smooth-scrolling 
    --wm-window-animations-disabled 
    --animation-duration-scale=0 
    --disable-spell-checking  
    --disable-features=WhatIsNewPage,Promotions,LensOverlay        
    --enable-unsafe-swiftshader "$@"

Сохраняете текст выше в какой-нибудь /opt/own/bin/chrom, выставляете бит запуска:

chmod +x /opt/own/bin/chrom

И используете этот скрипт для первого запуска браузера.

Стоит напомнить, что символ отвечает за перенос строк, т.е. для программы весь набор параметров выше это одна длинная строка.

Если при копировании текста с Хабра что‑то сломается — просто удалите все и сведите все в одну длинную строку — так тоже запустится.

Переназначать обработку всех HTML-страниц в рабочем окружении на этот скрипт не стоит, поскольку процессы браузера Chrome умеют общаться между собой и пока есть хоть один работающий процесс — его настройки будут использоваться для запуска новых копий.

Теперь рассказываю страшную сказку про «прожорливый» Chrome и пропавшую память, точнее про эту интересную строку:

systemd-run --user --slice=chromium.slice chromium

Дело в том, что у браузера Chrome есть дурная привычка считать весь компьютер своей собственностью и захватывать максимум доступных ресурсов — всю свободную память и все доступные процессоры и ядра.

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

Но стоит лишь немного просесть по мощности используемого оборудования или доступным ресурсам для более прожорливых программ (привет Davinci Resolve [21]) и любимый браузер от «корпорации добра» немедленно показывает звериный оскал свое истинное лицо.

В случае ноутбука (тем более мощного) немедленно проявляется еще один дурной эффект:

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

Так что становится жизненно необходимым сажать браузер на ресурсную диету с помощью systemd [22] и функционала cgroups [23].

Делается это в современных Linux-дистрибутивах довольно просто, для начала создаем файл ~/.config/systemd/user/chromium.slice со следующим содержимым:

[Slice]
MemoryAccounting=yes
MemoryHigh=1G
MemoryMax=1.5G
MemorySwapMax=3000M
CPUAccounting=true
CPUQuota=70%

Помимо очевидных лимитов на объем используемой памяти (MemoryHigh и MemoryMax), тут еще задается квота на загрузку процессора (CPUQuota), что не дает поднять ее выше заданного лимита — 100% загрузку CPU от процессов Chrome вы больше не увидите.

Теперь самое важное:

все указанные лимиты применяются ко всем дочерним процессам, которые запускает Chrome во время работы.

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

Ну и сам запуск с помощью черной магии systemd-run и указания слайса:

systemd-run --user --slice=chromium.slice chromium

Аналогичным образом можно ограничивать по ресурсам любые другие «жирные» приложения, например Telegram, который в последних версиях повадился генерировать 100% загрузку процессора по любому поводу.

Замечу, что сей хитрый трюк работает и с приложениями, работающими внутри AppImage [24] или snapd [25]-пакетов, так что с его помощью замечательно урезаются аппетиты версий Chrome/Chromium в Ubuntu/Manjaro, управляемые snapd.

Отключение анимации в действии

Отключение анимации в действии

❯ Отключение анимации

Существует одно интересное расширение [26] для Chrome, позволяющее отключать анимированные картинки на всех страницах:

вместо мигающей хтони анимации будет отображаться один статичный кадр.

Нетрудно догадаться, что этим сильно снижается нагрузка на CPU/GPU (особенно в случае устаревшего оборудования), с чего происходит серьезная экономия заряда батареи.

Так что очень рекомендую к использованию.

Ungoogled Chromium и установка расширений

К сожалению для установки расширений из официального магазина для «левого» Ungoogled Chromium необходимо специальное расширение [27], без которого вас обрадуют ошибкой [28]:

CRX_REQUIRED_PROOF_MISSING

А кнопка установки в интерфейсе магазина окажется скрытой.

В качестве альтернативного варианта можно использовать специальный сайт [29] от авторов расширения, который позволяет скачать пакет с расширением .crx и установить его локально в вашем браузере.

Теперь переходим к самому интересному — к параметрам запуска.

❯ Параметры Chrome

У браузера Chrome есть огромное количество разнообразных параметров запуска, как документированных так и не очень. Часть из них дублируется во внутреннем служебном интерфейсе chrome://flags/, часть — нет.

Так выглядит служебный интерфейс с настройками браузера Chrome

Так выглядит служебный интерфейс с настройками браузера Chrome

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

Тем более что ряд опций, доступных через служебный интерфейс не имеют отдельного параметра запуска.

Этих самых параметров настолько много, что был создан отдельный сайт [30], посвященный только лишь их описанию, регулярно выгружаемому непосредственно из исходного кода браузера.

Так выглядит небольшая часть параметров в динамике:

Тут показано менее 1% всех параметров запуска браузера

Тут показано менее 1% всех параметров запуска браузера

С учетом постоянного устаревания и регулярных ломающих изменений в функционале браузера, нет ни возможности ни особого смысла описывать абсолютно все, поэтому ниже только те параметры, которые постоянно используются на моих машинах в целях оптимизации.

Поехали.

--enable-features=VaapiVideoDecoder,VaapiVideoEncoder

Параметр --enable-features= как нетрудно догадаться из названия используется для принудительного включения опций браузера.

В данном случае принудительно включаются кодеки для аппаратного декодирования видео, работающие на базе Video Acceleration API [31] (VAAPI).

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

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

Комфортно смотреть видео даже на современном железе без работающего VAAPI вряд ли получится из-за сильной загрузки процессора, поэтому настройка актуальна для всех пользователей.

--enable-gpu-rasterization 

Данный ключ принудительно включает аппаратную отрисовку [32] страниц с помощью GPU:

Chrome 37 introduced a GPU rasterizer. When enabled, some paint workloads can go from 100ms/frame to 4-5ms/frame.

Несмотря на то что опция является «экспериментальной» и вроде как работает не во всех случаях — ее включение это единственный вариант комфортного использования современного браузера на устаревшем железе.

--disable-gpu-compositing 

Принудительное отключение GPU-реализации композитора страниц [33].

Актуально для сильно устаревшего оборудования, вроде моего Asus F3KE, поскольку GPU-композитор на нем порождает совершенно дикие визуальные артефакты:

Феерический баг

Феерический баг
--enable-zero-copy 

Согласно строчке с описанием [34] в исходном коде браузера:

Enable rasterizer that writes directly to GPU memory associated with tiles.

Немного ускоряет рендер страниц и снижает нагрузку на память, но может порождать визуальные артефакты [35], так что включать стоит не всем.

--disable-background-networking 

Запрещает браузеру использовать фоновые сетевые запросы, например проверку обновлений для установленных расширений.

--disable-client-side-phishing-detection 

Отключает фоновую проверку сайтов на фишинг.

Этот параметр вроде как удален [36] в новых версиях браузера, но все еще часто встречается в различных руководствах и материалах.

Фоновое обновление этих баз отнимает ресурсы а сама проверка плохо работает в современных реалиях разделенного интернета, поэтому отключаем.

--disable-prompt-on-repost 

Отключает дурацкое предупреждение о повторной отправке формы:

Хром и скорость - 11
 --disable-sync 

Отключает облачную синхронизацию учетной записи Google.

Актуально только для обычного Chromium, для ungoogled-версии не используется, поскольку функционал глобальной учетной записи там вырезан.

--metrics-recording-only 

Указывает браузеру только записывать отчеты с метриками производительности, но запрещает отправлять их на сервера Google. Отчеты сохраняются в текущем профиле, актуальны при поиске проблем с медленной работой браузера или отдельных сайтов.

--no-first-run 

Отключает приветственный диалог при первом запуске браузера.

--safebrowsing-disable-auto-update 

Отключает автоматическое фоновое обновление баз для «Safe Browsing [37]» — специального сервиса Google для защиты от фишинга и подозрительных сайтов. Актуально для обычного Chromium, поскольку в ungoogled‑версии функционал «Safe Browsing» удален.

--ignore-gpu-blocklist 

Натурально заставляет браузер «работать на дровах» — использовать неподдерживаемое и устаревшее оборудование для аппаратного ускорения.

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

--renderer-process-limit=2 

Еще один «магический» параметр, критически влияющий на производительность браузера и потребляемые ресурсы:

именно с его помощью переопределяется лимит на количество запущенных процессов отрисовки страниц — самых тяжелых процессов браузера, создающих основную нагрузку на систему.

Количество таких процессов напрямую влияет на потребляемые ресурсы, поэтому в случае ограниченных ресурсов стоит выставить какое-то небольшое число.

--disable-smooth-scrolling 

Просто «имба» за которую вы потом будете благодарить — параметр отключает плавную прокрутку в браузере, которая очень сильно влияет на скорость при работе на слабом или устаревшем оборудовании.

Влияет настолько сильно, что разницу становится видно визуально после перезапуска.

--wm-window-animations-disabled 

Отключает практически всю анимацию во внутренних интерфейсах браузера — там где опции настроек, закладки и расширения.

--animation-duration-scale=0 

Переопределяет длительность воспроизведения CSS-анимации, значение 0 означает полное отключение, но работает к сожалению только для элементов интерфейса самого браузера, не для страниц.

--disable-spell-checking 

Отключает фоновую проверку правописания, которая серьезно влияет на скорость работы браузера (вплоть до подвисания страниц).

--enable-unsafe-swiftshader

Еще один важный параметр, который разрешает использование «небезопасного» программного рендера WebGL [38], что позволяет использовать 3D-графику в браузере даже на устаревшем оборудовании, которое не поддерживает современное Vulkan API [39].

--disable-features=WhatIsNewPage,Promotions,LensOverlay,OptimizationGuideOnDeviceMode

Данный параметр по прямой аналогии с описанным в самом начале --enable-features= переопределяет опции браузера, которые необходимо отключить.

В данном случае отключаем встроенную рекламу новых фич браузера, которые вылезают при обновлениях и очень сильно бесят отвлекают.

Актуально только для обычного Chromium, поскольку в ungoogled-версии все эти радости вырезаны целиком.

Теперь рассказываю для самой широкой аудитории — про оптимизацию браузера под Windows.

Прокрутка ленты Reddit в качестве демонстрации, поскольку Reddit — один из самых «тяжелых» популярных сайтов, известных автору

Прокрутка ленты Reddit в качестве демонстрации, поскольку Reddit — один из самых «тяжелых» популярных сайтов, известных автору

❯ Хром и Windows

Я использую Windows 11, 10 и 7 на рабочих станциях а также множество разных виртуальных машин с серверными версиями Windows.

Поскольку оптимизации актуальны только при использовании браузера на рабочей станции (мало кому интересно работать из браузера прямо с сервера, правда?), поэтому в качестве тестовой среды будут выступать только три пользовательских версии Windows: 11, 10 и 7.

Технические характеристики машины из ролика с лентой Reddit

Технические характеристики машины из ролика с лентой Reddit

Скрипт запуска выглядит следующим образом:

chrome.exe --enable-features=VaapiVideoDecoder,VaapiVideoEncoder^
    --disable-features=WhatIsNewPage,Promotions,LensOverlay^
    --enable-gpu-rasterization^
    --disable-gpu-compositing^
    --enable-zero-copy^
    --disable-background-networking^
    --disable-client-side-phishing-detection^
    --disable-prompt-on-repost^
    --disable-sync^
    --metrics-recording-only^
    --no-first-run^
    --safebrowsing-disable-auto-update^
    --ignore-gpu-blocklist^
    --renderer-process-limit=4^
    --disable-smooth-scrolling^
    --wm-window-animations-disabled^
    --animation-duration-scale=0^
    --enable-unsafe-swiftshader %*

Сохраняете текст выше в файле run.cmd, кладете в каталог рядом с chrome.exe и используете для первого запуска.

Используемые параметры браузера и их логика [40] полностью совпадают с описанными выше для Linux, шаги по установке расширения для отключения анимации также полностью аналогичны.

Замечу, что символ ^ — аналог в UNIX-мире и используется для переноса длинных строк в командных скриптах под Windows.

Если что‑то перенесется неправильно — просто удаляете символы ^ и сводите все в одну длинную строку.

Также добавлю, что в последние версии и Chrome (и даже Chromium) под Windows авторы напихали AI-фич [41] под завязку, поэтому на моих рабочих станциях с Windows ныне используются только и исключительно Ungoogled-сборки [42].

Ungoogled Chromium на Windows 7 со всем тюнингом. Справа менеджер задач и загрузка памяти

Ungoogled Chromium на Windows 7 со всем тюнингом. Справа менеджер задач и загрузка памяти

Chrome и старые Windows

Официально Google перестала поддерживать Windows 7 [43] для Chrome/Сhromium еще в 2023 году, поэтому если у вас осталась живая «семерка» и есть необходимость использовать современный браузер — будут определенные сложности.

Обратите внимание на версию браузера и дату сборки

Обратите внимание [44] на версию браузера и дату сборки

Цитируя одну известную шутку: чем бы вы ни занимались — обязательно найдется азиат [45], который сделает еще круче. В случае с портированием Chrome на устаревшие версии Windows именно так и произошло:

стоило только начать изучать вопрос и доступные варианты — немедленно нашелся репозиторий со сборками последних версий Chrome… под Windows XP!

Windows XP [46] вышла в далеком 2001м году и процесс портирования под настолько старую ОС был весьма непростым занятием. Вот тут [47] выложены готовые сборки браузера под Windows XP с поддержкой аппаратного ускорения (!) — невероятный хардкор.

Теперь переходим к разделу для самых ярых фанатов своего дела.

Да, это современная сборка браузера Chrome, летающая на антикварном оборудовании. Без записи с экрана все работает еще быстрее

Да, это современная сборка браузера Chrome, летающая на антикварном оборудовании. Без записи с экрана все работает еще быстрее

❯ Chrome и FreeBSD

Наконец последним разделом описываю то, с чего началась эта статья в далеком 2023-м году [48]:

оптимизация работы браузера Chrome под FreeBSD на очень сильно устаревшем оборудовании.

«Очень сильно устаревший» — про тот самый Asus F3KE из 2007 года, спасенный автором от достойного погребения за долгую службу.

Так выглядит вывод fastfetch [49] с описанием оборудования:

Even In Death, I Still Serve (ц)

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

Так выглядит скрипт запуска:

#!/usr/local/bin/bash

source ~/.exports.sh

/usr/local/bin/ungoogled-chromium
    --enable-features=VaapiVideoDecoder,VaapiVideoEncoder 
    --enable-gpu-rasterization 
    --disable-gpu-compositing 
    --enable-zero-copy 
    --disable-background-networking 
    --disable-prompt-on-repost 
    --metrics-recording-only 
    --no-first-run 
    --ignore-gpu-blocklist --renderer-process-limit=2 
    --wm-window-animations-disabled 
    --animation-duration-scale=0 
    --enable-unsafe-swiftshader "$@"    

Поскольку во FreeBSD довольно давно используется ungoogled-версия [51] браузера, поэтому были убраны параметры для того функционала, который был вырезан в ungoogled-версии [52].

Строка:

source ~/.exports.sh

на самом деле скрывает портал в ад отдельный механизм повторного использования сессии DBus, подключаемый тут файл ~/.exports.sh [53] создается вот таким специальным скриптом:

#!/usr/local/bin/bash

FF=0

if [[ -z $DBUS_SESSION_BUS_ADDRESS ]]; then
    lines=$(pgrep "dbus-daemon" -u "$USER" | (while read -r line
    do
        echo $line
        exp=`procstat -h -e $line` 
        if [[ "$exp" == *"DBUS_SESSION_BUS_ADDRESS="* ]]; then
	    echo "DBus session found"
	    exp2=`echo $exp |sed 's/.*DBUS_SESSION_BUS_ADDRESS=([^ ]*).*/1/'`
    	    echo export DBUS_SESSION_BUS_ADDRESS="$exp2" > ~/.exports.sh
    	    FF=1
    	    break
        fi
    done; echo $lines) )
    echo $FF
    if [[ "$FF" = 8 ]]; then
       echo "DBus session not found, starting.."
       dbus_out=`dbus-launch`
       echo $dbus_out > ~/.exports.sh
    fi
    if [[ -f ~/.exports.sh ]]; then
        source ~/.exports.sh
    fi
fi

Этот скрипт натуральным образом ворует сессию работы с DBus, забираясь в окружение другого запущенного процесса (да, так можно было) — все ради того чтобы не запускать процесс dbus-launch повторно.

Помимо приседаний с параметрами, в версии для FreeBSD также используется описанное выше расширение браузера для отключения анимации, но вместо изоляции через cgroups используется более простой вариант со сниженным лимитом на количество запущенных процессов рендера:

 --renderer-process-limit=2

Чего вполне достаточно для комфортной работы.

❯ За кадром

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

--profile-directory=test-profile

Указывает альтернативное название профиля, по-умолчанию он называется Default и находится в каталоге пользователя [54].

Актуально в первую очередь для тестов, но может влиять на системы защиты от ботов, поскольку данный ключ часто используют системы автоматизации [55], работающие поверх браузера.

--single-process

Заклинание чудовищной силы, которое заставляет браузер работать в одном единственном процессе:

Браузер Chrome, работающий целиком в одном процессе. Шок-контент

Браузер Chrome, работающий целиком в одном процессе. Шок-контент

Этот весьма опасный (во всех смыслах) параметр переключает Chrome в нестандартный режим работы, при котором браузер не порождает отдельные процессы на каждую вкладку.

К сожалению такой режим работы является весьма нестабильным и браузер будет падать, особенно на сложном контенте и с большими расширениями вроде AdBlock.

Тем не менее, это единственный известный мне способ заставить Chrome работать без порождения дополнительных процессов.

--disable-features=UseSkiaRenderer

Отключает бекэнд Skia Renderer [56], используемый для отрисовки практически всей графики:

Chrome uses Skia for nearly all graphics operations, including text rendering. GDI is for the most part only used for native theme rendering; new code should use Skia.

К сожалению этот параметр является обязательным если вы собираетесь использовать --single-process, думаю очевидно что скорость отрисовки страниц при этом упадет.

❯ Эпилог

Мой опыт [57] оптимизации браузера весьма специфичный и далеко не глобальный, поскольку решаемая задача касается производительности на устаревшем оборудовании и не самых популярных операционных системах.

Поэтому с радостью почитаю про ваш опыт и применяемые практики.


Новости, обзоры продуктов и конкурсы от команды  [58]Timeweb.Cloud [59] — в нашем Telegram-канале [58] 

Перейти ↩

Может быть интересно:

Автор: alex0x08

Источник [64]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/30650

URLs in this post:

[1] памяти: http://www.braintools.ru/article/4140

[2] Chrome: https://www.google.com/chrome/

[3] Safari: https://www.apple.com/safari/

[4] Firefox: https://www.firefox.com/

[5] сказочная альтернативщина: https://github.com/gosub-io/gosub-engine

[6] Opera: https://www.opera.com/

[7] Internet Explorer: https://www.microsoft.com/en-us/download/internet-explorer

[8] корпорацией добра: https://en.wikipedia.org/wiki/Google

[9] Chromium: https://www.chromium.org/getting-involved/download-chromium/

[10] зрения: http://www.braintools.ru/article/6238

[11] Ungoogled Chromium: https://ungoogled-software.github.io/

[12] ориентированных на безопасность: https://www.kali.org/

[13] Lenovo Z580: https://specspro.net/laptops/6879-lenovo-ideapad-z580-2151/

[14] ASUS F3Ke: https://gadgetaz.com/Laptop/ASUS_F3Ke--76

[15] Debian: https://www.debian.org/

[16] Ubuntu: https://ubuntu.com

[17] Manjaro: https://manjaro.org/

[18] Mageia: https://www.mageia.org/en/

[19] Calculate: https://www.calculate-linux.org/

[20] OpenRC: https://wiki.gentoo.org/wiki/OpenRC

[21] Davinci Resolve: https://www.blackmagicdesign.com/products/davinciresolve

[22] systemd: https://systemd.io/

[23] cgroups: https://en.wikipedia.org/wiki/Cgroups

[24] AppImage: https://appimage.org/

[25] snapd: https://snapcraft.io/snapd

[26] интересное расширение: https://chromewebstore.google.com/detail/animation-policy/ncigbofjfbodhkaffojakplpmnleeoee

[27] специальное расширение: https://github.com/NeverDecaf/chromium-web-store

[28] ошибкой: http://www.braintools.ru/article/4192

[29] специальный сайт: https://www.ungoogledextensions.com/

[30] отдельный сайт: https://peter.sh/experiments/chromium-command-line-switches/

[31] Video Acceleration API: https://en.wikipedia.org/wiki/Video_Acceleration_API

[32] аппаратную отрисовку: https://www.chromium.org/developers/design-documents/chromium-graphics/how-to-get-gpu-rasterization/

[33] GPU-реализации композитора страниц: https://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome/

[34] строчке с описанием: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/common/switches.cc?q=kEnableZeroCopy&ss=chromium

[35] может порождать визуальные артефакты: https://github.com/nwjs/nw.js/issues/6581

[36] вроде как удален: https://issues.chromium.org/issues/41099515

[37] Safe Browsing: https://safebrowsing.google.com/

[38] программного рендера WebGL: https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/gpu/swiftshader.md

[39] Vulkan API: https://en.wikipedia.org/wiki/Vulkan

[40] логика: http://www.braintools.ru/article/7640

[41] AI-фич: https://search.google/ways-to-search/ai-mode/

[42] Ungoogled-сборки: https://ungoogled-software.github.io/ungoogled-chromium-binaries/

[43] перестала поддерживать Windows 7: https://support.google.com/chrome/thread/185534985/sunsetting-support-for-windows-7-8-8-1-and-windows-server-2012-and-2012-r2-in-early-2023?hl=en

[44] внимание: http://www.braintools.ru/article/7595

[45] азиат: https://github.com/e3kskoy7wqk

[46] Windows XP: https://en.wikipedia.org/wiki/Windows_XP

[47] тут: https://github.com/e3kskoy7wqk/Chromium-for-windows-7-REWORK/issues/37#issuecomment-4239159962

[48] в далеком 2023-м году: https://blog.0x08.ru/running-freebsd-on-really-old-hardware

[49] fastfetch: https://github.com/fastfetch-cli/fastfetch

[50] Even In Death, I Still Serve: https://www.warhammer-community.com/en-gb/articles/iIP5RR4u/40-years-of-warhammer-even-in-death-i-still-serve/

[51] ungoogled-версия: https://www.freshports.org/www/ungoogled-chromium/

[52] был вырезан в ungoogled-версии: https://github.com/ungoogled-software/ungoogled-chromium/blob/master/README.md#key-features

[53] exports.sh: http://exports.sh

[54] находится в каталоге пользователя: https://superuser.com/questions/377186/how-do-i-start-chrome-using-a-specified-user-profile

[55] системы автоматизации: https://www.selenium.dev/documentation/webdriver/

[56] Skia Renderer: https://www.chromium.org/developers/design-documents/graphics-and-skia/

[57] опыт: http://www.braintools.ru/article/6952

[58] Новости, обзоры продуктов и конкурсы от команды : https://t.me/timewebru

[59] Timeweb.Cloud: http://Timeweb.Cloud

[60] Перейти: https://timeweb.cloud/?utm_source=habr&utm_medium=banner&utm_campaign=promo

[61] Мне 15, и я собираю AI-стартап для недвижки: как я победил GPU, баги PyTorch и очередь в визовый центр: https://habr.com/ru/companies/timeweb/articles/1037476/

[62] Нет в Google — нет в Интернете: https://habr.com/ru/companies/timeweb/articles/984898/

[63] Что детектировал детектор таксофонных карт?: https://habr.com/ru/companies/timeweb/articles/1037508/

[64] Источник: https://habr.com/ru/companies/timeweb/articles/1037426/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1037426

www.BrainTools.ru

Rambler's Top100