Приручаем и прокачиваем огнелиса: The Ultimate Guide

в 10:38, , рубрики: Firefox, firefox 17, браузеры, доработка напильником, кастомизация, правильные браузеры, развертывание, метки: , , , ,

image

Лирическое вступление

Не люблю гонку версий, своей бессмысленностью отдаленно напоминающую гонку вооружений. Не успели как следует довести до ума текущую версию — выпускают новую, с новыми багами, уязвимостями и «особенностями». Для таких как я — любителей стабильных и проверенных решений для корпоративной среды, да и для себя тоже — у команды Мозилы есть сборка типа ESR: в течение длительного времени для нее выходят обновления, устраняющие ошибки и уязвимости, сама же major версия браузера не обновляется! Правда, скачать эту замечательную ESR-сборку можно только с FTP (официального): ftp://ftp.mozilla.org/pub/firefox/releases/ (ищите там папку вроде «17.0.1esr»).
Только что вышла давно мной ожидавшаяся 17-я ESR версия, предыдущая была только 10-я! В связи с этим событием решил написать подробное руководство по оптимизации нашего (не)любимого браузера — с разбором всех параметров, что каждый из них делает и откуда он получен.

Часть 1. Чтоб Мозила не тормозила

1. К своему удивлению обнаружил: характерное торможение, с которым многие, наверно, сталкивались, вызывается встроенным скриптом, определяющим системные настройки прокси.
Если прокси нет — указываем это явно: «настройки — дополнительно — сеть — соединение» — «без прокси». Если наш лис работает в корпоративной среде — по возможности задаем явно прокси или скрипт proxy.pac
2. Минимум дополнений (addons): лишних не устанавливаем, из тех что установлены держим включенными только те, которые реально нужны. Помним: лишний плагин — лишняя затрата вычислительных ресурсов при прорисовке каждой страницы. Собственно плагины (plugins): отключаем по максимуму все, и в первую очередь dotnet, DRM, java quick start. В условиях корпоративной среды принимаем меры, чтобы эти плагины вообще не появлялись в списке установленных.
3. Ограничение объема и автоматическая оптимизация базы данных places — файла places.dat. Рекомендую плагин Vacuum cleaner. Настроить автоматическую чистку каждые 3 дня и забыть о существовании плагина.
4. Ограничение размера кэша до разумного размера. Думаю, понятно каждому: гигабайт распыленных по диску файлов и индексы всего этого скорости работы не прибавит.

Часть 2. Избавляемся от нежелательного контента

Давно прошли те времена, когда проблемой являлась загрузка, собственно, рекламных баннеров в формате gif. Сейчас зло — счетчики и централизованные баннерные сети, шпионящие, еще, к тому же, за пользователем: во-первых, скрипты, которые тяжелее «полезной нагрузки» — самой рекламной графики, во-вторых, централизованный характер: повышенная нагрузка на их сервер то и дело приводит к задержке подгрузки их контента, а не загрузив его, браузер откладывает рендеринг страницы — в результате мы ждем даже при быстром интернете… А засилье флэш-рекламы? Оно представляет собой «сейчас», по сравнению с «тогда» несопоставимо большую проблему: достаточно посмотреть, сколько памяти уходит на процесс plugin-container — сравнимо с самим браузером: новые версии adobe flash player стали очень прожорливыми и каждый лишний флэш-баннер следует расценивать как лишнее открытое приложение!
Ниже приводится рекомендуемый список плагинов, призванных решить проблему нежелательного контента:
1. Семейство плагинов adblock — работают по принципу «поставил и забыл». Из всего их многообразия рекомендую обратить внимание на 2: Adblock plus — самый популярный плагин, и на его альтернативу Adblock lite. Последний легковеснее и не содержит функции «разрешить некоторую ненавязчивую рекламу», которую, впрочем, легко отключить.
Достоинства: блокируют рекламу сразу после установки («из коробки»), умеют блокировать любой контент (картинки, флэш, скрипты) и даже убирать указанные в черном списке HTML-контейнеры прямо из страницы (по id, class...)
Недостатки: добавленный по умолчанию черный список (внимание!) не блокирует счетчики, готовые правила представляют из себя слишком длинные списки, что чревато растратой вычислительной мощности, малопонятный синтаксис при желании создать своё правило вручную (обратная сторона универсальности).
Для легкого решения проблемы со счетчиками, добавляем в подписку список «Против счётчиков»: https://ruadlist.googlecode.com/svn/trunk/cntblock.txt В итоге, штатный список «ruadlist+easylist» плюс «антисчетчик» обеспечивают комфортный браузинг без единого написанного вручную правила.
2. noscript, yesscript — блокировка скриптов, помогает победить такое зло как скрипты счетчиков и баннерных сетей.
noscript работает по принципу белого списка, есть предустановленный белый список, yesscript — по принципу черного списка
Недостатки для noscript: специализация на блокировке скриптов, невозможность компромисса: блокирует скрипты даже для урла открытой на данной вкладке страницы, что обязательно испортит работоспособность многих сайтов, а в случае установки галки «полностью разрешить выполнение javascript» (по-моему, единственно приемлемый режим) и добавления отдельных скриптов (например, счетчиков) в черный список — сам черный список увидеть в настройках (или задать его заранее) невозможно. Ну а yesscript — реализующий адекватный алгоритм черного списка — по скудности настроек способен разочаровать даже фаната минимализма: есть только список урлов (рег. выражений?) скрипты откуда следует блокировать, его нужно создавать самостоятельно. Для сравнения: Adblock, если в нем пользоваться только самописными правилами, точно также заблокирует скрипт, но кроме него — еще и картинки, и флэш, и целые блоки HTML кода прямо в странице. Разница очевидна.
3. imglikeopera — очень интересный плагин, незаслуженно обделенный популярностью. Блокирует картинки и флэш. Умеет принудительно кэшировать графический контент на длительный срок. Допилен мной до возможности блокировать еще и скрипты.

Часть 3. Правильные настройки по дефолту

Самый простой способ развертывания ФФ с заданными настройками — положить js-файл, аналогичный prefs.js в профиле в директорию [путь установки ФФ] / defaults / preferences. Я его называю так же как и в профиле — prefs.js, но имя не принципиально, главное чтобы было расширение .js
Итак, создаем js-файл со следующим содержимым:

# Mozilla User Preferences

pref("browser.shell.checkDefaultBrowser", false);
pref("app.update.enabled", false);
pref("browser.cache.memory.max_entry_size", 4096);
pref("browser.display.show_image_placeholders", false);
pref("browser.download.useDownloadDir", false);
pref("browser.feeds.showFirstRunUI", false);
pref("browser.history_expire_days_min", 10);
pref("browser.places.importBookmarksHTML", false);
pref("browser.privatebrowsing.dont_prompt_on_enter", true);
pref("browser.rights.3.shown", true);
pref("browser.safebrowsing.enabled", false);
pref("browser.safebrowsing.malware.enabled", false);
pref("browser.search.update", false);
pref("browser.sessionhistory.max_total_viewers", 1);
pref("browser.startup.page", 0);
pref("browser.tabs.animate", false);
pref("config.trim_on_minimize", true);
pref("dom.event.contextmenu.enabled", false);
pref("extensions.blocklist.enabled", false);
pref("extensions.shownSelectionUI", true);
pref("extensions.update.enabled", false);
pref("extensions.update.notifyUser", false);
pref("extensions.pendingOperations", false);
pref("toolkit.telemetry.prompted", true);
pref("geo.enabled", false);
pref("gfx.direct2d.force-enabled", true);
pref("layers.acceleration.force-enabled", true);
pref("intl.charsetmenu.browser.cache", "windows-1251, UTF-8");
pref("intl.charset.default", "windows-1251");
pref("intl.charsetmenu.browser.cache.size", 2);
pref("network.cookie.prefsMigrated", true);
pref("network.dns.disableIPv6", true);
pref("network.http.pipelining", true);
pref("network.http.proxy.pipelining", true);
pref("network.http.request.max-start-delay", 1);
pref("network.prefetch-next", false);
pref("plugins.hide_infobar_for_outdated_plugin", true);
pref("privacy.sanitize.timeSpan", 0);
pref("security.warn_entering_weak", false);
pref("security.warn_viewing_mixed", false);

Разбираемся что каждый параметр делает

Источники:
{1} решение найдено мной
{2} www.latestonnet.com/2012/01/17/optimize-firefox-to-run-4-times-faster-than-before.html
{3} sonikelf.ru/optimizuruem-firefox/
{4} egonitron.com/2007/05/25/the-truth-about-the-firefox-pipelining-trick/
{5} techlogon.com/2012/12/02/how-to-speed-up-firefox-tweaking-guide/
Для начала о стратегии. В отличие от множества горе-оптимизаторов, я не стремлюсь поменять каждую настройку во всём подряд, включая все тонкости поведения системы на низком уровне. Вместо этого, осознанно и со здравым смыслом прорабатываются следующие направления:
1) отключить весь лишний и мешающий функционал — уведомления, большого брата антиспуфинг, ipv6 etc.
2) экономия оперативной памяти
3) включить HTTP 1.1, но без экстремизма

нет назойливым обновлениям без спросу

pref("app.update.enabled", false);
pref("browser.search.update", false);
pref("extensions.update.enabled", false);
pref("extensions.update.notifyUser", false);
pref("extensions.pendingOperations", false);
pref("extensions.blocklist.enabled", false);

{1}

оптимизация расхода памяти

pref("browser.sessionhistory.max_total_viewers", 1);

количество страниц, сохраняемых в оперативной памяти, для быстрого перехода назад — уменьшая значение экономим память; рекомендуют ставить 0, но я (как и в {2}) считаю оптимумом 1: в подавляющем большинстве случаев нам нужен возврат именно на 1 шаг, и здесь лис порадует нас своей скоростью;

pref("browser.cache.memory.max_entry_size", 4096);
pref("config.trim_on_minimize", true);

размер кэша в оперативной памяти {3}
выгрузка страниц памяти при сворачивании окна {3}

отучаем от глупых лишних вопросов

pref("browser.shell.checkDefaultBrowser", false);

нет назойливым предложениям сделаться браузером по умолчанию {1}

pref("browser.feeds.showFirstRunUI", false);
pref("browser.rights.3.shown", true);
pref("extensions.shownSelectionUI", true);
pref("toolkit.telemetry.prompted", true);
pref("browser.places.importBookmarksHTML", false);
pref("browser.privatebrowsing.dont_prompt_on_enter", true);

firefox не показывает саморекламу и ненужные напоминания при первом запуске {1}

противодействуем сбору информации

pref("geo.enabled", false);
pref("browser.safebrowsing.enabled", false);
pref("browser.safebrowsing.malware.enabled", false);
pref("privacy.donottrackheader.enabled",true);

отключить шпионаж Google и проверку урлов на фишинг — ускоряет работу: браузер делает меньше ходов {1}
посылать заголовок «do not track» {1}

интерфейс, юзабилити

pref("browser.startup.page", 0);
pref("dom.event.contextmenu.enabled", false);
pref("browser.download.useDownloadDir", false);
pref("browser.history_expire_days_min", 10);
pref("browser.tabs.animate", false);
pref("browser.display.show_image_placeholders", false);

открываем пустую страницу по дефолту — идеально для корпоративной среды{1}
запрещаем сайтам отключать контекстное меню {1}
лис не гадит под себя при скачивании задается вопрос куда качать {1}
сокращаем минимальное число дней хранения истории с 90 до 10 {2}
отключаем анимацию табов {5}
не показываем места для картинок — ускоряет прорисовку {5}

прорисовка страниц
(экспериментально, привожу этот блок в связи с тем, что раньше
постоянно рекомендовали content.notify.backoffcount = 5)

pref("content.notify.backoffcount", 5);
pref("content.notify.ontimer", true);
pref("content.interrupt.parsing", true);
pref("content.notify.interval", 750000);

низкоуровневые настройки прорисовки страниц до их загрузки;
часто рекомендуют content.notify.backoffcount = 5, но никто не говорит, что нужно еще включать content.notify.ontimer, чтобы первая настройка на что-то влияла

аппаратное ускорение графики

pref("gfx.direct2d.force-enabled", true);
pref("layers.acceleration.force-enabled", true);

принудительное задействование графического ускорителя: браузер более требователен к видеодрайверу и ускорителю, чем игры? Говорим твёрдое «нет» этому недоразумению! {1}

кодировки

pref("intl.charsetmenu.browser.cache", "windows-1251, UTF-8");
pref("intl.charset.default", "windows-1251");
pref("intl.charsetmenu.browser.cache.size", 2);

какие наборы символов кэшируем
кодировка страниц по умолчанию {1}
сколько наборов символов кэшируем (по умолчанию 5) {1}

сетевые настройки

pref("network.dns.disableIPv6", true);
pref("network.http.pipelining", true);
pref("network.http.proxy.pipelining", true);
pref("network.http.request.max-start-delay", 1);
# опционально
# pref("network.http.max-persistent-connections-per-server", 8);
# pref("network.prefetch-next", false);

{1-5}
отключает никому здесь не нужный IPv6
включение HTTP1.1 (множественные запросы в одном соединении) при прямом соединении и через прокси соответственно.
задержка перед превышением допустимого числа keep-alive соединений, по умолчанию 10 (сек), в {2} рекомендуется 0, я считаю, что лучше поставить не 0, а 1, сохранив некоторую задержку
увеличение с 6 (умолч.) до 8 макс. числа постоянных соединений с 1 сервером
отключение предзагрузки следующих страниц, в условиях корпоративной среды — нужная настройка

«безопасность»

pref("security.warn_entering_weak", false);
pref("security.warn_viewing_mixed", false);

отключение бесполезных вопросов о слабом шифровании и смешанном контенте, на которые пользователи все всё равно ответят «да» {1}

todo: найти бы способ отучить ФФ ругаться на недействительный сертификат, но пока такой настройки я не нашел

Автор: noldo32

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js