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

image

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

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

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

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

Часть 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 — очень интересный плагин, незаслуженно обделенный популярностью. Блокирует картинки и флэш. Идея заимствована из «Оперы» — кнопка, управляющая показом картинок.
Достоинства: умеет принудительно кэшировать графический контент на длительный срок, поддерживает регулярные выражения. Недостатки: не содержит предустановленных наборов правил — всё задается вручную, не управляет скриптами (но был экспериментально допилен мной, чтобы добавить и эту возможность — впечатления вызывает смешанные), в исходный код страницы — в тэги добавляет лишние параметы «ilo-full-src» и при сохранении страниц они там присутствуют.

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

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

# Mozilla User Preferences

pref("app.update.enabled", false);
pref("browser.cache.memory.max_entry_size", 512);
pref("browser.cache.memory.capacity", 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.shell.checkDefaultBrowser", false);
pref("browser.startup.page", 0);
pref("browser.tabs.animate", false);
pref("browser.xul.error_pages.expert_bad_cert", true);
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("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.donottrackheader.enabled",true);
pref("security.warn_entering_weak", false);
pref("security.warn_viewing_mixed", false);
pref("toolkit.telemetry.prompted", true);

Разбираемся что каждый параметр делает
Источники:
{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/
Первоисточник (правда, для старых версий): http://kb.mozillazine.org/Category:Preferences

Для начала о стратегии. В отличие от множества горе-оптимизаторов, я не стремлюсь поменять каждую настройку во всём подряд, включая все тонкости поведения системы на низком уровне. Вместо этого, осознанно и со здравым смыслом прорабатываются следующие направления:
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}

* upd *

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

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

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

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

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

Внимание: browser.cache.memory.capacity = 4096 означает, что будет выделено 4 Мб на кэш в памяти (значение в кб). Если свободной памяти заведомо много, рационально ставить значения в разы больше. С другой стороны, минимальный размер кэша означает, что в корпоративной среде всем будет хватать памяти…
browser.cache.memory.max_entry_size означает максимальный размер кэшируемого в память объекта (значение в кб). По идее, чем меньше, тем эффективнее расходуется память. Часто (как в {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}

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

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}

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

* upd *

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

pref("security.warn_entering_weak", false);
pref("security.warn_viewing_mixed", false);
pref("browser.xul.error_pages.expert_bad_cert", true);

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

прорисовка страниц

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, чтобы первая настройка на что-то влияла

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

http://habrahabr.ru/post/161053/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *