Научный консалтинг
Главная
Контакты
Номер телефона
Как мы работаем
Гарантии
Условия
Цены

Последнее обновление:

О браузерах Firefox: как они развивались

О браузерах Firefox

Почти 15-летний опыт автора статьи по использованию браузеров Firefox (точнее - практически, исключительно, Firefox), вероятно, дает ему некое моральное право высказать свою точку зрения на этот счет, т.е. поговорить о достоинствах и недостатках этих браузеров. Но, вначале – небольшое отступление.

Почему браузеры требуют все больше и больше ресурсов компьютера?

В последние лет 10…20, пожалуй, укрепилась следующая тенденция: браузеры все обновляются и обновляются. Лучше ли, хуже ли они от этого становятся – это вопрос. Крайне спорный вопрос. А вот то, что потребление ресурсов у них все увеличивается и увеличивается, а также то, что у них появляется поддержка совершенно ненужных (а то и опасных для пользователя) технологий – это точно. За счет чего же?

Чем больше технологий включено в браузер, тем он «объемнее»

Понятно, что чем больше технологий он поддерживает, тем, как правило, будет и больше у него объем программного кода. Соответственно, выше объем исполняемых файлов. И, скорее всего, больше объем потребляемой оперативной памяти. Однако, возникает вопрос: насколько это оправдано? В этой статье мы попробуем хотя бы немного разобраться.

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

Скажем, если человеку нравится именно Internet Explorer 6… ну, почему бы и нет?

С другой стороны, есть, все-таки, некоторые объективные критерии, на оснований которых можно говорить, что вот в «том-то» или вот в «этом-то» такой-то браузер лучше или хуже. На наш взгляд, внимания заслуживают браузеры линейки Firefox. Поэтому ниже речь пойдет о них.

Итак, на примере браузеров Firefox. Вначале немного истории…

Первый браузер Firefox (версия 0.1) был выпущен  23 сентября 2002 года. Первый проект. На тот момент браузер еще не привлек внимания общественности. Затем был Firefox 0.5. Она тоже как-то осталась незамеченной.

Но потом вдруг, начиная с версии 1.0, пользователи увидели, что браузер-то… хороший, многофункциональный и удобный. Это произошло 9 ноября 2004 г. Затем были версии 1.5, 2.0, 3.0 и т.д.

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

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

был когда-то...

в самом деле, удобный а, главное, экономичный и быстрый браузер. Удобный в эксплуатации, под который написано множество дополнений. Но, самое главное, этот браузер дает давал пользователю возможность гибких настроек под себя. Т.е. дает СВОБОДУ (коей в современном компьютерном мире становится, увы, все меньше и меньше). Чем, кстати, напоминает напоминал операционную систему Linux.

Правда, насчет гибких настроек – речь идет о СТАРЫХ версиях этого браузера, до появления Firefox Quantum. Но, об этом – ниже.

Не говоря уж о том, что в этом браузере легко и быстро открываются страницы при том, что сохранено/открыто… НЕСКОЛЬКО СОТЕН вкладок. Согласитесь, такой браузер сложно разлюбить. Тем более, что ни о каком сравнении, например, с Chrome, даже и речи вести не стоит: представьте, СКОЛЬКО будет создано новых процессов при открытых одновременно трехстах вкладок? Правильно: не менее 300. СКОЛЬКО это будет отнимать ресурсов компьютера?... Легко посчитать.

Впрочем, Chrome и не позволит открыть такое количество вкладок. Он не предусмотрен для ТАКОЙ работы. Равно как и Internet Explorer, к примеру.

Честно говоря, В ЧЁМ(?) состоит причина роста популярности браузера Google Chrome - совершенно непонятно. Тем более, что его (в отличие от набившего уже оскомину Яндекс.Браузера, который воспринимается уже как хроническая мозоль) даже не рекламируют толком. Браузер - тормозной при серьезной нагруженной работе (по сравнению с Firefox), гораздо менее функциональный, дает пользователю меньше возможностей настроек. Впрочем, конечно, если требуется открыть всего 5...20 вкладок вебсайтов, особо не пытаться как-то настроить браузер под себя - тут, да, вполне подойдет не только Google Chrome, но даже и Internet Explorer или Edge. Если же пользователь хочет большего - ему как минимум, следует задуматься о браузере Pale Moon, к примеру.

Только вот что: на не слишком мощных компьютерах следует использовать… версии Firefox постарше (ибо новые версии занимают уж очень много ресурсов). И – будет счастье.

По всей видимости, этот браузер, до поры, разрабатывали не т.н. «командным способом» (который стал модным нынче), а творчески и с умом. В конце концов, в его разработке участвует масса добровольцев, волонтеров. Именно это, на наш взгляд, и послужило причиной его популярности. Кроме того, при разработке Firefox особое внимание уделялось поддержке стандартов W3C. Можно сказать, что это браузер, который в наибольшей степени соответствует стандартам W3C.

Сравнительная таблица возможностей браузеров Firefox под Windows и требуемых ими ресурсов

Для определенности, приводимые ниже данные касаются браузеров Firefox под операционную систему Windows. Отметим, для Linux объемы установочных файлов, как правило, несколько больше. Данные использовались отсюда.

Версия Firefox Добавленная функциональность в очередной версии браузера Объем установочного файла(ов) 32-битный дистрибутив, МБ
2 Вторая известная разработка Firefox (после версии 1.0) 6,2
3 CSS :read-only and :read-write selectors; CSS Logical Properties; High-quality kerning pairs & ligatures; CSS font-size-adjust; Custom protocol handling; getElementsByClassName; Cross-document messaging; document.evaluate & XPath; SVG filters; Offline web applications; contenteditable attribute (basic support); SVG effects for HTML; input event; getComputedStyle; HTML5 semantic elements; Element.getBoundingClientRect() 7,8
Firefox 3.5 Drag and Drop; Text API for Canvas; defer attribute for external scripts; JSON parsing; Web Workers; Geolocation; Cross-Origin Resource Sharing; Wav audio format; Ogg/Theora video format; Ogg Vorbis audio format; Online/offline status; Media Queries: resolution feature; CSS Masks; Video element; Audio element; XMLHttpRequest advanced features; MP3 audio format 8,0
Firefox 3.6 Crisp edges/pixelated images; matches() DOM method; Multiple file selection; Hashchange event; async attribute for external scripts; indeterminate checkbox; FileReader API; WOFF - Web Open Font Format; CSS Filter Effects; classList (DOMTokenList); File API 8,2
Firefox 4 :focus-visible CSS pseudo-class; :placeholder-shown CSS pseudo-class; :matches() CSS pseudo-class; Web Sockets; requestAnimationFrame; IndexedDB; :optional CSS pseudo-class; :default CSS pseudo-class; tabindex global attribute; Search input type; input placeholder attribute; Pattern attribute for input fields; Email, telephone & URL input types; Session history management; hidden attribute; Form validation; Attributes for form submission; Form attribute; Autofocus attribute; readonly attribute of input and textarea elements; disabled attribute of the fieldset element; Inline SVG in HTML5; ECMAScript 5 Strict Mode; Typed Arrays; document.currentScript; Basic console logging functions; Blob URLs; SVG SMIL animation; SVG in HTML img element; Strict Transport Security; Content Security Policy 1.0; :indeterminate CSS pseudo-class; SVG in CSS backgrounds; accept attribute for file input; HTML5 form features; Datalist element; SVG favicons; Constraint Validation API; Touch events; WebM video format; X-Frame-Options HTTP header 12,3
Firefox 5
13,3
Firefox 6 Blob constructing; progress element; Printing Events; Server-sent events; matchMedia; ECMAScript 2015 (ES6); DeviceOrientation & DeviceMotion events; CustomEvent 13,6
Firefox 7 Navigation Timing API 13,7
Firefox 8 Element.insertAdjacentHTML(); FileReaderSync 14,3
Firefox 9 CSS font-stretch; Document.execCommand(); Do Not Track API 14,8
Firefox 10 Page Visibility; Full Screen API; Battery Status API; console.time and console.timeEnd 15,3
Firefox 11 Vibration API 15,7
Firefox 12
15,8
Firefox 13 SPDY protocol 16,1
Firefox 14.0.1 Pointer Lock API; Mutation Observer 16,3
Firefox 15 Rest parameters; Proximity API; High Resolution Time API; Opus; SVG fragment identifiers 17,3
Firefox 16 meter element; ES6 Number 7,7
Firefox 17 :dir() CSS pseudo-class; getUserMedia/Stream API; sandbox attribute for iframes 8,8
Firefox 18 Screen Orientation; Window.devicePixelRatio; Reversed attribute of ordered lists; Proxy object 19,6
Firefox 19 ::placeholder CSS pseudo-element; TextEncoder & TextDecoder; CSS Paged Media (@page) 19,9
Firefox 20 Download attribute 20,3
Firefox 21 Scoped CSS; crypto.getRandomValues(); MPEG-4/H.264 video format 20,6
Firefox 22 WebRTC Peer-to-peer connections; HTML templates; Arrow functions; Web Notifications; asm.js; Synchronous Clipboard API; Ambient Light Sensor; CSS.supports() API; AAC audio file format 21,1
Firefox 23 Range input type 21,6
Firefox 24 TLS 1.1 21,9
Firefox 25 srcdoc attribute for iframes; Array.prototype.find; Web Audio API 22,5
Firefox 26 URL API; ES6 Generators 23,2
Firefox 27 CSS unset value; CSS all property; TLS 1.2; Promises 23,7
Firefox 28
24,3
Firefox 29 Number input type; Color input type; Shared Web Workers; Internationalization API; Gamepad API; MediaRecorder API; :in-range and :out-of-range CSS pseudo-classes; URLSearchParams 27,9
Firefox 30 CSS background-blend-mode; relList (DOMTokenList) 30,0
Firefox 31 Beacon API; WebVTT - Web Video Text Tracks; Path2D; Content Security Policy Level 2 30,9
Firefox 32 Blending of HTML/SVG elements; CSS position:sticky 33,8
Firefox 33 Rebeccapurple color; Link type "noreferrer"; Web Animations API 35,0
Firefox 34 CSS font-variant-numeric; ES6 Template Literals (Template Strings); Web Cryptography 38,0
Firefox 35 Resource Timing; Public Key Pinning 38,3
Firefox 36 CSS will-change property; CSSOM Scroll-behavior; Scroll methods on elements (scroll, scrollTo, scrollBy); HTTP/2 protocol; Referrer Policy 39,3
Firefox 37 CSS display: contents 39,2
Firefox 38 Srcset and sizes attributes; Ruby annotation; Picture element; User Timing API; BroadcastChannel; Encrypted Media Extensions 38,0
Firefox 39 Fetch; WOFF 2.0 - Web Open Font Format; CSS Scroll snap 39,4
Firefox 40 String.prototype.includes 40,2
Firefox 41 CSS writing-mode property; CSS text-orientation; CSS Font Loading; Channel messaging 41,0
Firefox 42 Media Source Extensions; Upgrade Insecure Requests; createImageBitmap 43,2
Firefox 43 Subresource Integrity; Array.prototype.includes; system-ui value for font-family; Media Capture from DOM Elements API 43,8
Firefox 44 let; Service Workers; Push API; Brotli Accept-Encoding/Content-Encoding; IndexedDB 2.0 41,2
Firefox 45 ES6 classes 41,7
Firefox 46 Permissions API 42,6
Firefox 47 Case-insensitive CSS attribute selectors; Object.values method; Object.entries; ChaCha20-Poly1305 cipher suites for TLS 43,2
Firefox 48 CSS color-adjust; String.prototype.padStart(), String.prototype.padEnd(); navigator.hardwareConcurrency 43,3
Firefox 49 CSS text-stroke and text-fill; #rrggbbaa hex color notation; background-position-x & background-position-y; Details & Summary elements; Speech Synthesis API 41,7
Firefox 50 Directory selection from file input 42,8
Firefox 51 Minimum length attribute for input fields; FLAC audio format 43,2
Firefox 52 CSS justify-content: space-evenly; CSS touch-action property; CSS Grid Layout (level 1); :focus-within CSS pseudo-class; rel=noopener; Async functions; Touch events; WebAssembly 43,5
Firefox 53 display: flow-root; CSS caret-color; Auxclick 42,4
Firefox 54
43,2
Firefox 55 CSS text-justify; WebVR API; requestIdleCallback; IntersectionObserver 32,8
Firefox 56
34,7
Firefox 57 AbortController & AbortSignal; Date and time input types 34,7
Firefox 58 CSS font-rendering controls; Promise.prototype.finally; Intl.PluralRules API 35,5
Firefox 59 CSS overscroll-behavior; Pointer events 35,1
Firefox 60 JavaScript modules via script tag; Web Authentication API; 'SameSite' cookie attribute; TLS 1.3 34,8
Firefox 61 Server Timing 34,9
Firefox 62 Variable fonts; flat & flatMap array methods 35,8
Firefox 63 prefers-reduced-motion media query; gap property for Flexbox; Custom Elements (V1) 40,9
Firefox 64 Media Queries: interaction media features; CSS scrollbar styling 41,1
Firefox 65 CSS Environment Variables env(); WebP image format; AV1 video format; Streams 41,8
Firefox 66 Payment Request API 42,7
Firefox 67 prefers-color-scheme media query; CSS revert value; JavaScript modules: dynamic import(); FIDO U2F API 43,7
Firefox 68 CSS Containment; Resize Observer; unhandledrejection/rejectionhandled events 44,8
Firefox 69 CSS Containment; Resize Observer; unhandledrejection/rejectionhandled events 46,3
Firefox 70
48,2
Firefox 71 CSS Subgrid
Firefox 72


Понятно, что, с одной стороны, объем установочного (инсталляционного) файла – это далеко не самый правильный способ анализа. Тем более, можно заметить, что объемы некоторых более новых версий браузера были даже ниже, чем предыдущие, но при этом содержали в себе дополнительную (новую на тот момент) функциональность. Тем не менее, можно сделать хотя бы некоторые общие выводы.

А они состоят в том, что объемы установочных файлов браузера Firefox имеют, в целом, тенденцию к росту. Что вызвано, в том числе, и дополнительной функциональностью.

А как быть с быстродействием?

Поначалу, при написании настоящей статьи, было желание – привести для каждой версии браузера и соответствующие цифры по требуемому объему оперативной памяти. Но потом было решено – категорически отказаться от этой затеи. Дело в том, что, с одной стороны, некоторые релизы (версии) были оптимизированы по потреблению памяти. С другой стороны, потребление оперативной памяти может быть качественно разным в зависимости от условий использования браузера. Одно дело, когда в нем открыто несколько вкладок. И совсем другое – когда число открытых вкладок составляет несколько сотен.

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

Как сообщается, якобы, версии Firefox до 25-30 падали при увеличении объема занимаемого ими оперативной памяти примерно 2.5 ГБ (якобы, около 20 работающих вкладок).

Это утверждение, на самом деле, неверное. Хотя бы потому, что 20 работающих вкладок – ну, никак не займут 2,5 ГБ (так может быть, разве что, в новых Firefox или если открыты вкладки каких-то совершенно неоптимизированных сайтов под известным названием ГС). Вот сейчас автор статьи наугад открыл 20 вкладок (из состава 400 с лишним, ранее сохраненных в браузере). Объем оперативной памяти, занимаемой Firefox 24, судя по диспетчеру задач, составляет 1,026 ГБ. Открыл еще 20 вкладок – объем занятой памяти подрос до 1,6 ГБ. Ни о каких 2,5 ГБ даже и речи не идет.

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

Впрочем, конечно, да, бывает, что Firefox 24 и в самом деле, падает (при этом перезапуск браузера и восстановление сеансов занимает, при наличии быстрой связи с интернетом, секунд 10). Но, это случается не чаще 1 раза в месяц. И это при том, что в браузере установлено 7 функционирующих (т.е. включенных) расширений.

Поэтому для адекватных выводов видится единственный выход – тестировать КАЖДУЮ из перечисленных версий, открывая каждый раз несколько сотен вкладок. А это задача – на, скажем так, любителя. Она вполне может затянуться и на неделю непрерывного тестирования.

Однако, какой можно сделать общий вывод по поводу потребления оперативной памяти?

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

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

Строго говоря, применение многопроцессности для браузеров – это, как минимум, недоразумение. А уж для каждой новой вкладки использовать дополнительный процесс (как это делается в том же Chrome) – это уже даже не роскошь, а банальная, ничем не оправдываемая расточительность.

В целом же, в результате перехода на многопроцессные движки, а также при добавлении все более новой и новой функциональности быстродействие браузеров падает, потребление оперативной памяти растет. Как же быть?

Здесь, на наш взгляд, стоит определиться: а так ли необходимо, в самом деле, переходить на более новую версию браузера?

Рассмотрим доводы ЗА и ПРОТИВ

ЗА

  1. Пользователь будет чисто психологически (но, не более того) убежден, что, мол, раз браузер обновлен, стало быть он, якобы, эффективнее и безопаснее, чем предыдущие версии.

На самом деле, все обстоит несколько сложнее. Если говорить об эффективности, то новые версии, напротив, работают, зачастую, медленнее, чем старые. Хотя, не все. На самом деле, скорость работы браузеров Firefox в зависимости от номера версии описывается немонотонной функцией.

Далее, если говорить о безопасности и устраненных багах (ошибках) в браузерах предыдущих версий – так кто же гарантирует их отсутствие и в новых браузерах? Правильно: никто. Более того, вполне может быть и так, что новая функциональность будет нести в себе гораздо больше опасностей для пользователей, чем старая добрая, уже проверенная. Поэтому в таких условиях говорить о, якобы, большей безопасности новых версий браузеров будет некорректно. Тем более, что под лозунгом "повышения безопасности" в настоящее время нередко скрывается БАНАЛЬНОЕ стремление производителей программного обеспечения навязать пользователям новые (совершенно ненужные и даже опасные, вредные) технологии. Взять, ту же технологию WebAssembly, зачем-то появившуюся в браузерах Firefox, начиная с версии 52. По сути, эта технология может стать настоящей дырой в безопасности - в силу того, что программный код под управлением WebAssembly, работающий в браузере, может получать непосредственно доступ... к ОПЕРАТИВНОЙ ПАМЯТИ компьютера пользователя. На что неспособен javascript.

  1. Новые браузеры поддерживают больше новых технологий.

И то верно. Да вот только – КОМУ они нужны, эти новые технологии? Правильно: разработчикам сайтов.

А зачем они им нужны? Правильно: в 95% случаев – чтобы облегчить себе жизнь, упростить разработку сайтов.

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

Ну, чтобы не быть голословным. Взять свойство позиционирования html-блока display:flex. Да, удобно. Но, не работает в браузерах старше, чем 5…9 летней давности. А так ли оно необходимо? Нет. От слова совсем нет. Потому, что имевшиеся до него другие свойства CSS вполне позволяют делать то же самое. Ну, может, потребуется немного (совсем немного) больше html-кода. Стоит ли разработчику ради облегчения своей работы делать сайт, плохо доступный для просмотра пользователями, использующими не самые свежие браузеры?... На наш взгляд, нет, конечно, нет. Но, разработчики бывают… разные. В том числе и такие, которым – лишь бы побыстрее что слепить, а уж как-там будет пользователю от их «перлов» - там, как говорится, и трава не расти. Понадобилось, мол, Вам смотреть сделанный нами сайт – обновляйте браузеры. Да, есть нынче и такие вот категоричные странные разработчики.

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

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

А пользователям – это надо? Так ли нужно прислушиваться к возомнениям владельцев и разработчиков «суперсовременных» сайтов? В общем, см. выше.

  1. Новые браузеры (например, Firefox) работают по многопроцессной технологии, тогда как более старые их версии – по однопроцессной, точнее, даже по однопоточной. Если каждая вкладка окрывается в качестве отдельного процесса, этот процесс будет иметь свое, независимое от других процессов, виртуальное адресное пространство. Соответственно, эксплуатация браузерных уязвимостей, вызывающих переполнение памяти и ошибки сегментации, отразится на работе только той вкладки, которая и вызвала эту проблему.

Это, пожалуй, да, наиболее весомый (и, наверное, практически единственный) довод в пользу использования НОВЫХ версий браузеров. Впрочем, сама по себе многопроцессность браузера – это фактор снижения производительности.

ПРОТИВ

  1. Чем моложе браузер, тем, как правило, больше он будет занимать места на жестком диске, тем требовательнее он к потреблению оперативной памяти и, стало быть, медленнее работать. Это – в целом, хотя некоторые более новые версии Firefox обладают, действительно, более высоким быстродействием по сравнению с НЕКОТОРЫМИ старыми.

В целом же это означает, что пользователю придется ради такого браузера… обновлять и свой компьютер, т.е. делать апгрейд. Еще раз: ТОЛЬКО ради браузера. Точнее, только ради некоего сайта, открыть который можно лишь в новом браузере. А оно пользователям надо?

Зададимся вопросом: а что, разве разработчик такого «суперсовременного» неоптимизированного сайта готов возмещать пользователям затраты на апргейд их компьютеров?... Наверное, нет. Кто будет оплачивать это, кто будет тратить время на повторную установку операционной системы, других программ, будет ли разработчик «суперсовременного» сайта в этом участковать? Нет, скорее всего, даже и пальцем не пошевельнет. Так тогда – стоит ли делать апгрейд (а иначе невозможно открывать некоторые «суперсовременные» сайты)? На наш взгляд, нет. Конечно же, нет.

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

    Да-да, взять ту же WebAssembly, которая вполне может являться будущей дырой (огромных размеров и возможностей) в безопасности. А ведь практически все более-менее современные браузеры ее так или иначе поддерживают… Например, в Firefox она прошита, начиная с версии 52.

  2. Более старые браузеры падают (аварийно прекращают работу) в случае, если объем занимаемой ими оперативной памяти превышает определенный.

Строго говоря, коль скоро автор статьи на habr.com откровенно дезинформировал в отношении, якобы, всего 20 открытых вкладок, способных занять целых 2,5 ГБ(!) памяти в браузерах версий до 25…30, то я, автор настоящей статьи, сильно сомневаюсь и в указанной им цифре 2,5 ГБ, как, якобы, предел размера занимаемой оперативной памяти, после которого браузер, типа того, "упадет". Точнее, не сомневаюсь, а ответственно заявляю, что она - НЕВЕРНА, так как занижена. Это – просто с потолка взятая цифра, выдумка. Автором данной статьи проведена соответствующая проверка - см. ниже.

Спорить же с троллями, оккупировавшими сайты habr/habrahabr, желания как-то не возникает. Тем более, что тем, кто там пытается сказать правду (противоречащую, скажем так, интересам крупных корпораций), иной раз попросту срезают карму и человек лишается права голоса. Хотя, дело-то не в карме, а в банальном нежелании спорить с троллями. Ну, а те, кто хочет знать правду - могут узнать ее из других статей. Хотя бы, из данной статьи.

Как мол, так, тот факт, что браузер падает после того, как займет область памяти более, чем некий критический, это разве – достоинство? Сейчас многие заговорят, что, мол, вот он – недостаток-то (якобы). Ну, браузер же падает…

Нет, друзья. На самом деле, это – ДОСТОИНСТВО.

В самом деле, зададимся вопросом: по какой причине объем оперативной памяти, потребляемый СТАРЫМ браузером firefox, до версий 25…30 (например, версии 24), может достигнуть 2.5 ГБ? Если браузер работает в штатном режиме (без попыток эксплуатации уязвимостей), то для этого потребуется открыть около сотни вкладок, если не больше. Причем, не просто открыть, а чтобы они еще и активно работали! А всего лишь несколько десятков открытых вкладок такой объем памяти не заполнят – это автор данной статьи только что проверил. Ну, если конечно, ВСЕ открытие и работающие в браузере вебстраницы не будут очень уж ресурсоемкими.

А вот при работе в НЕштатном режиме – да, вполне может случиться перерасход оперативной памяти. Это когда некий скрипт пытается эксплуатировать уязвимости, например, методом истощения динамической памяти и/или стека. Т.е. задает, скажем, огромные значения переменных, вынуждая браузер записывать и записывать в динамическую память и/или стек разный мусор в надежде – переполнить их. Дело в том, что технология ASLR, применяемая в большинстве современных операционных систем, как минимум, при каждом запуске браузера будет (случайным образом) менять адреса переменных, функций и т.п., размещаемых в памяти. Для того, чтобы хакер не мог предугадать, по какому же адресу будут располагаться они, эти переменные и функции. Пока не предугадает – он не сможет эксплуатировать уязвимости. А вот при истощении памяти появляется возможность предугадать адреса, так как диапазон их рандомизации становится гораздо меньше.

И теперь зададим вопрос: что же произойдет при попытке подобного истощения? Правильно, объем потребляемой памяти будет постоянно… возрастать. Затормаживая работу браузера, кстати. И, как только он достигнет некоего предела – то попросту аварийно завершит работу (собственно, на это-то и рассчитана технология ASLR). А вместе с ним завершит работу и тот зловредный скрипт. Ну, а при следующем (очередном) запуске браузера используемые им переменные, функции будут размещены уже на совсем других адресах… И скрипту придется заново начинать свою (бесполезную) работу. Естественно, на такое поведение мало-мальски соображающий пользователь обратит внимание. Так как увидит, что при открытии определенной вкладки браузер начинает как бы притормаживать, подвисать. Поэтому попросту закроет ее, ту вкладку, запустившую зловредный скрипт. Вот и всё.

Так что наличие максимального предела потребления оперативной памяти – это, еще раз, не недостаток, а, напротив, достоинство. Пусть и (пока) немногими оцениваемое. Другое дело, что разработчики Firefox могли бы предупреждать о скором достижении предельного размера занимаемой памяти. Скажем, путем выдачи браузером соответствующего сообщения. Впрочем, наверное, такая возможность есть, просто ее надо настроить. Или в самом браузере, или в каком-нибудь дополнении.


В браузерах Firefox настройки осуществляются путем ввода в адресной строке команды about:config. После чего следует согласиться быть осторожным.

Новые браузеры Firefox, на самом деле – гигантский шаг назад

В свое время Эндрю Таненбаум точно также отозвался о Linux, который получил более монолитное ядро. Мы здесь даже не ведем речь о том, что в новых браузерах не работают многие прекрасные дополнения (addons), которые вполне себе функционировали и упрощали жизнь пользователям в старых Firefox. Не ведем речи о существенно сниженных возможностях так называемой «кастомизации», т.е. пользовательским настройкам браузеров «под себя».

Речь идет о кардинальной перемене самого концептуального принципа построения браузера. Ранее, в старых браузерах использовалась технология XUL, которая позволяла взаимодействовать с самим ядром, внутренностями браузера. И именно она давала возможность весьма гибких настроек – путем добавления в браузер различных дополнений. Нужна пользователю какая-либо дополнительная функциональность – он и добавил соответствующее дополнение, протестировал его и, если понравилось – оставил. А не понравилось – снес в течение 5 секунд.

А что дает «новая» технология Web Extensions? Она дает существенно меньшие возможности для дополнений.

Которая, кстати, позаимствована разработчиками Firefox из браузера... Google Chrome. Честно говоря, так и осталось невыясненным, непонятным - ну, ЗАЧЕМ же разработчики Firefox вдруг обиделись на прекрасный браузер, разработанный ими и вдруг решили оставить свои технологии, перейдя на тот же самый движок, который применяется в Google Chrome. Это, как минимум, странно...

Да, в будущем разработчики Firefox, возможно, добавят в ядро браузера ту функциональность, которую ранее обеспечивали наиболее популярные дополнения… И вот тут и получается тот самый шаг назад, отмеченный Таненбаумом в отношении Linux, но в данном случае полностью применимый к браузерам Firefox. Дело в том, что если добавлять только функциональность наиболее популярных дополнений – то как быть остальным пользователям, которым требуется и менее популярная дополнительная функциональность? А если добавлять ВСЮ функциональность (т.е. функциональность ВСЕХ ранее существовавших дополнений), то… объем инсталляционного файла браузера подрастет, как минимум, в разы. И, соответственно, снизится быстродействие.

Тогда как технология XUL в этом смысле была более, гораздо более гибкой, так как позволяла легко добавлять или удалять расширения самому пользователю, без перекомпилирования (ядра) браузера. Скажем, добавил пользователь некое расширение… но оно замедлило работу браузера. Ну, тогда - взял, да и удалил. Или – временно отключил. И все, быстродействие вновь станет высоким. А понадобилось – так включил вновь.

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

И в этом смысле старые браузеры Firefox, основанные на технологии XUL, можно считать построенными на основе микроядерного подхода. Когда имеется, условно говоря, микроядро (чисто браузер, без расширений) и расширения, которые можно легко добавлять, включать или отключать. А вот новые браузеры – напоминают классический подход, в рамках которого имеется ядро больших размеров, так называемое монолитное. При этом мало-мальски серьезная функциональность расширений будет прошита в нем. Поэтому пользователь уже столь просто, как раньше, не сможет добавить что-то дополнительное, если оно мало-мальски существенно изменяет работу браузера.

По сути, вся проблема технологии XUL сводится к двум моментам:

  1. Якобы, сложность реализации многопроцессности,
  2. Трудности с поддержкой расширений.

Про многопроцессность мы уже говорили выше. При этом весьма сомнительно, что в рамках XUL невозможно реализовать многопроцессность. Ибо распараллелить можно практически ВСЁ. На наш взгляд, это был просто фейковый повод для разработчиков. Вполне можно было бы реализовать, например, промежуточный слой.

Что касается поддержки расширений – проблема состоит в том, что расширения, взаимодействующие с браузером на низком уровне (без наличия промежуточного слоя в виде соответствующего API), могут стать неработоспособными при изменении ядра браузера. Однако, эта проблема – надуманная. Потому, что разработчик каждого расширения волен в выборе – делать ли ему поддержку своего расширения для более нового браузера (быть может, с новой XUL) или нет. Часть разработчиков сделали бы это, часть; возможно, нет. Однако, как минимум, сохранилась бы хотя бы ЧАСТЬ приложений, работающий и в более новых браузерах.

Ну, а отказ от XUL привел попросту к тому, что процентов 50% расширений, во-первых, перестали работать. Во-вторых, для их портирования в новых браузерах (не поддерживающих XUL) разработчикам придется КАРДИНАЛЬНО переделывать их. А это значит, что далеко не все неработающие расширения заработают вновь.

Наконец, в-третьих, отказ от XUL, как уже говорилось, сделает принципиально невозможным реализацию ряда функций ранее работавших расширений. По крайней мере, до того момента, пока она не будет включена Mozilla на уровне ядра браузера. Что, повторимся, приведет росту объема ядра, к потере его производительности.

А рост объема ядра, помимо того, приведет и к росту сложности. Последнее, кстати, тоже критикуется Э. Таненбаумом, как источник снижения безопасности. Ведь чем больше объем программного кода, тем, как правило, больше в нем ошибок и уязвимостей. Так что, еще раз: тот факт. что браузер - более новый, обновленный - вовсе не свидетельствует о том, что в нем меньше уязвимостей. Вполне может быть и наоборот.
Ну, и напоследок – конкретные примеры

Опять же, чтобы не быть голословным, приведем некоторые факты. Итак, на дворе – конец 2019 г. Компьютер i5, 4 процессора. Размер оперативной памяти: 8 ГБ. Операционная система Windows 7, в ней установлен браузер Firefox 24. Выпущенный осенью 2013 г. Т.е. всего-то 6 с небольшим лет назад.

  1. В этом браузере одновременно присутствуют около 450 вкладок, из них открыто и работает несколько десятков. При этом объем оперативной памяти, потребляемой Firefox, составляет 810 МБ. При этом браузер был загружен и работал в течение последних 5…7 часов непрерывно.

Для сравнения: браузер Internet Explorer 11, в котором были открыты всего 7 (СЕМЬ) вкладок из состава тех, которые были открыты в Firеfox, потреблял почти 400 МБ. Браузер был открыт и работал около непрерывно около 4 часов. Как говорится, почувствуйте разницу.

  1. Сайт, который подкачивает все новые и новые изображения по мере прокрутки страницы вниз. Для более эффективного и удобного просмотра, на страницу этого сайта подгружен javascript, вырезающий некоторые изображения (около 40% от общего их количества на странице). Каждое изображение занимает объем в районе 70 кБ, размеры каждого из них - примерно 400*500 пикселей. В течение 6 часов было просмотрено (не подумайте, что это преувеличение!) около 7 тысяч изображений, кроме того, около 5 тысяч были удалены скриптом после попадания на страницу. После этого Firefox потреблял немногим более 1,7 ГБ памяти.
Скриншот диспетчера задач WindowsВ браузере Firefox 24 обновлены 130 вкладок различных вебсайтов. Объем занимаемой оперативной памяти составил около 3 ГБ.
Как видно, объем оперативной памяти, занятой Firefox 24, составляет всего лишь около 3 GB. При том, что обновлены 130 вкладок, а всего в браузере открыто - более 400 вкладок.
Примечание: со скриншота удалены данные об остальных процессах, запущенных на компьютере.
  1. Была сделана попытка - принудительно "завалить" (т.е. заставить аварийно прервать работу) браузера Firefox 24. Для этой цели были в браузере, непрерывно функционировавшем в течение 6 часов, были принудительно обновлены 130 с лишним вкладок, сохраненные ранее в этом браузере (из состава около 400, открытых ранее - см. выше). Дальше эксперимент был прекращен чисто по причине того, что неохота было обновлять очередные вкладки. Понятно, что работа браузера при этом (временно) замедлилась. Объем оперативной памяти, занимаемой браузером, составил около 3 ГБ (см. рисунок). Падать браузер не собирался. Так что утверждение о том, что, якобы, браузеры Firefox ниже версий 25...30 при открытии 20 вкладок потребляют память около 2,5 ГБ и "падают", имеющееся в откровениях одного из авторов сайта habr.com, является ни чем иным, как типичной ложью. Аварийное завершение браузера версии 24, если и возможно, может быть вызвано, скорее всего, или системной ошибкой со стороны Windows (или Linux, соответственно), или, что вероятнее, неправильно (некорректно) сделанным сайтом, страницу которого пытается открыть браузер. А это, повторимся, сигнал для пользователя: немедля покинуть этот ГС и более не открывать его вообще. В идеале - занести в черный список браузера (есть соответствующие аддоны для этого). Или, как вариант, занести его домен в файл C:\Windows\system32\drivers\etc\hosts, сделав переадресацию на локальный IP-адрес 127.0.0.1.

Вывод: такой браузер в условиях, в общем-то, достаточно нагруженной работы, вполне справится с ней даже на гораздо более слабом компьютере. Вообще, немного странно, о каких же, якобы, торможениях Firefox (версий 24…30) идет речь повсюду в интернете? Ложь ведь откровенная. Люди, что, на 286/386 компьютерах их запускали?... Или, максимум, на Pentium III?... На наш взгляд, причина этих «жалоб» - одна: недобросовестная антиреклама. Коей в интернете, увы, становится все больше и больше.

Поэтому, честно говоря, уже надоедает читать все эти «отзывы пользователей» и «мнения специалистов». Рискну предположить, что не менее 50...70% из них – поддельные.

Если что и тормозит, так это версии Firefox моложе 60.

Исходя из этого, видятся очевидные ответы на некоторые вопросы.

Что-то типа F.A.Q.:

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

Ответ: разумеется, нет. Если пользователь этого браузера, конечно, в здравом уме. Обновлять браузер если и целесообразно, то в том и только в том случае, когда в старых его версиях ДЕЙСТВИТЕЛЬНО имеются уязвимости. Еще раз: не фейковые, которые являются банальной пропагандой обновления браузеров, а ДЕЙСТВИТЕЛЬНЫЕ, т.е. реальные. Которые способны, в самом деле, осуществить кражу паролей или файлов пользователя с его компьютера.

Вопрос: но, тем не менее, в новых версиях браузеров дейсвительно устраняются баги и уязвимости, в том числе и чуть ли не 5…7-летней давности.

Значит, все-таки есть реальная польза от обновления браузеров?

Ответ: во-первых, этими багами, скорее всего, так никто и не воспользовался для целей – нарушить работу компьютера, на котором установлен браузер или похитить данные. Потому, что написать эксплойт для эксплуатации имеющейся уязвимости – это дело хоть и возможное, но весьма сложное. Во-вторых, разве есть гарантия, что взамен старых (устраненных) багов в новые версии браузеров не будут внесены новые баги? Пусть и неизвестные широкому кругу лиц до определенного времени. Так как технологии развиваются, пишутся совершенно НОВЫЕ программные коды. А раз новые – так и там могут появляться аналогичные ошибки. Которые, да, будут устраняться в еще более новых браузерах, в будущем. И т.д. По сути, это – замкнутый круг. Так, стоит ли в нем, в этом замкнутом круге участвовать? Не прще ли просто использовать понравившуюся версию браузера для своих целей?

Вопрос: а если некоторые особо «суперсовременные» (точнее, выполненные горе-разработчиками) сайты не открываются вообще? Не потому, что браузер не может их открыть, а потому, что сервер блокирует открытие вебстраницы, узнав, что браузер – старый. Как быть?

Ответ: на наш взгляд, лучше не связываться с такими сайтами вообще. Ну, по возможности. Мало ли, что там на них будет… Раз разработчики таких сайтов не заботятся о пользователях. И пытаются собственными недоработками и ленью принудить пользователя вначале к обновлению браузера, а потом – и к апгрейду компьютера.

Вопрос: ну, а если некоторые вебстраницы все же открываются, но некорректно, нарушается верстка и т.п.?

Ответ: читать кэшированную страницу из поисковой системы, например, Google или Яндекс. При этом нередко страница откроется со сбитым оформлением и именно контент ее (текстовое содержание) вполне можно будет прочитать. Впрочем, практика автора статьи показывает, что подобные «суперсовременные» сайты содержат мало полезной информации и потому, за редким исключением, не жалко, что они толком не открываются.

А безопасный способ работы в интернете, на самом деле, состоит в том, что:

  1. Не следует сохранять пароли и логины в браузерах,
  2. Открытие, скажем так, ответственных вебстраниц, требующих авторизации и на которых необходимо не допустить разглашения используемых данных, следует НАЧИНАТЬ в первую очередь. Например, это – почтовые, банковские сервисы, интернет-магазины и т.п. А вот потом, после этого, можно открывать и другие страницы. При этом, если возникла необходимость вновь открыть (обновить) ответственную страницу, для надежности лучше перезапустить (закрыть и вновь открыть) браузер.
  3. Если та или иная страница вызвала зависание браузера – вполне возможно, что она пытается сделать так называемое истощение динамической памяти (кучи, heap) с целью обхода технологии рандомизации виртуальных адресов под названием ASLR. Которая предоставляет определенную (высокую, хотя и не не стопроцентную) защиту от выполнения эксплойтов. В подобных случаях лучше бы, не дожидаясь ответа проблемной вебстраницы, сразу закрыть браузер. Если он не желает закрываться – выгрузить его через диспетчер задач (если при работе в Windows). Если и это не получится – лучше, немедля, выключить компьютер. Затем, после последующего открытия браузера, следует постараться сразу же (пока не успела загрузиться!) закрыть проблемную страницу, запомнить ее домен (его можно посмотреть в журнале браузера) и больше не открывать ни одной страницы с этого домена вообще.

В идеале – после просмотра ответственных страниц лучше бы перезапустить браузер. И уже только потом просматривать все остальные.

Впрочем, надо заметить, что на 64-разрядных компьютерах вызвать истощение кучи – гораздо-гораздо более проблематичнее, чем на 32-х разрядных. По причине того, что максимальный размер (теоретически) виртуального адресного пространства в 32-разрядных операционных системах составляет всего 232 = 4,3*109 бит =  4 ГБ, тогда как в 64-разрядных системах он составит 248 = 2,8*1014 бит, что на 5 порядков выше. Истощение кучи при этом займет очень продолжительно время, особенно на не слишком мощных компьютерах. В этом смысле 64-разрядные системы являются, конечно, более безопасными, по сравнению с 32-разрядными.

  1. Надо также сказать, что некоторую защиту от эксплойтов, запускаемых посредством уязвимостей браузеров, могуть дать антивирусные программы. Тогда как плагины или расширения, типа Adblock, как правило, полностью бесполезны в этом отношении.
  2. Ну, и для совсем уж надежности - следует открывать сайты из интернета из браузера, запущенного в виртуальной машине.

Таким образом, можно сделать вывод: тот факт, что разработчики Firefox принудительно отказались от XUL, ограничив возможности расширенной настройки своего браузера, можно характеризовать, как самовредительство. В угоду браузеру Google Chrome. Который как раз, в отличие от Firefox, работает медленнее (по субъективному ощущению автора статьи), НЕ позволяет держать открытыми сотни вкладок.

Ибо при попытке открыть несколько десятков вкладок, во-первых, их размеры сузятся до размера фавиконок. И идентифицировать их будет решительно невозможно. Тогда как горизонтальной прокрутки вкладок, как это предусмотрено в Firefox, там не предусмотрено. Во-вторых, Google Chrome, видимо, упадет гораздо раньше, чем там будут открыто несколько сотен вкладок. Собственно, потому-то там и не предоусмотрена горизонтальная прокрутка, потому-то и размеры открытых вкладок уменьшаются по мере увеличения их количества. Да, чтобы пользователь САМ даже и не пытался открыть вкладок больше, чем несколько десятков. Ну, и т.д.

Зачем так сделали в Mozilla, честно говоря, непонятно. В самом деле, ну, зачем, ЗАЧЕМ было рубить на корню свои(!) отличные наработки? Зачем понадобилось губить столь самобытный и гибкий в настройке браузер Firefox? Не лучше ли было потихоньку устранять его уязвимости, добавлять новые технологии?

Кстати, добавление новых технологий также стоило бы делать на основе микроядерного подхода. Ибо, повторимся, для более-менее квалифицированных вебразработчиков – и старых технологий вполне достаточно. Скажем, не желает пользователь пользоваться Adobe Flash Player – так, взял и одним-двумя кликами мыши отключил его. Не нужен ему WebRTC (хотя бы по той причине, что это – уязвимая технология) – тоже взял, да отключил. Не нужно ему НТТР/2.0, НТТР/3.0 (что ни к чему хорошему не приведет, кстати) – тоже, совершенно свободно взял и отключил. И так далее. Ну, а если вдруг понадобилось – взял, на свой страх и риск – и подключил на время. При просмотре, скажем, страниц заведомо доверенного сайта. Например, может же пользователь по желанию подключать/отключать телеметрию.

Вот бы в каком направлении должен был развиваться Firefox!
А тут – на́ тебе, как говорится…



Комментарии:
Олег20.10.2020 15:43РедактироватьУдалить
Да, Firefox хороший был браузер.
Всего комментариев: 1
Пожалуйста, не забудьте ознакомиться с правилами оставления комментариев.



Подписаться на комментарии на этой странице

Мы можем выполнить

Другие услуги
Интересная и полезная
информация