Firefox 4

Firefox 4 — новейшая версия по-настоящему современного веб-браузера.

Быстродействие

  • Улучшенный JavaScript-движок — JägerMonkey, по некоторым оценкам работающий до 6 раз быстрее движка TraceMonkey, использовавшегося в Firefox 3.6.
  • Аппаратное ускорение (средствами графической платы) отрисовки страниц. В отличие от IE9, работающего исключительно через программный интерфейс Direct2D, доступный только в Windows Vista и выше, Firefox работает и использует аппаратное ускорение также и в Windows XP и в Mac OS, задействуя Direct3D и OpenGL.
  • Более плавная прокрутка страниц благодаря послойному кэшированию уже отрисованных фрагментов страниц.
  • Lazy Frame Construction: значительное ускорение добавления большого количества DOM-элементов.
  • Разбор HTML-кода происходит в отдельном потоке, повышая отзывчивость браузера.
  • Предварительное построение дерева документа ещё до того, как отработают внешние скрипты, потенциально содержащие вызовы типа document.write(). Если сгенерированный скриптом код будет соответствовать полноценной самостоятельной ветви DOM-дерева (balanced subtree), браузеру не потребуется повторно строить дерево всего документа. Результат — повышение быстродействия.
  • Работа innerHTML ускорена примерно на 20%.
  • Улучшения Places (движка работы с историей посещений и закладками). Например, повышена отзывчивость Firefox при загрузке страниц, а закрытие браузера теперь происходит многократно быстрее (практически мгновенно), чем ранее.
  • Расширения после установки теперь не распаковываются. Это значительно сокращает количество файлов, читаемых с диска при запуске браузера, существенно ускоряя тем самым запуск браузера.

HTML5 и мультимедиа

  • Новый лексический анализатор HTML-кода (парсер), действующий в соответствии с текущими нормами HTML5:
    • автоматически устранено множество ошибок, связанных с разбором HTML-кода;
    • возможность прямого включения SVG- и MathML-кода в HTML-код без необходимости связываться с пространствами имён XML;
    • новые структурные элементы HTML5 (article, section, nav и проч.) теперь являются элементами уровня блока по умолчанию;
    • поддержка HTML5-атрибутов у элементов форм, в частности:
    • интересный факт: в Gecko 2 (программный движок браузера Firefox) используется тот же канонический парсер HTML5, что и в валидаторе validator.nu (равно как и в части HTML-валидатора W3C, используемой при проверке HTML5-кода). При этом, поскольку оригинальный парсер написан на языке Java, а Firefox — на C++, код HTML5-парсера Firefox 4 получен автоматическим преобразованием Java-кода в код C++.
  • Поддержка воспроизведения видео в открытом видеоформате WebM средствами HTML5-элемента video. Формат WebM обеспечивает заметно более высокое качество изображения по сравнению Ogg Theora, поддержка которого была реализована в предыдущих версиях Firefox. Формат WebM представляет собой сочетание видеоформата VP8, звукового формата Ogg Vorbis и формата контейнера, основанного на формате «Матрёшка» (Matroska). Последний давно стал стандартом де-факто для видеофайлов, доступных в интернете.
  • Поддержка WebGL — стандарта отображения трёхмерных графики прямо в браузере без установки сторонних программных модулей.
  • Поддержка программного интерфейса Audio Data, позволяющего оперировать звуком средствами JavaScript на уровне отдельных отсчётов: например, генерировать звук с нуля прямо в браузере.
  • Поддержка программного интерфейса HTML History, позволяющего оперировать содержимым адресной строки без перезагрузки страницы.

CSS

  • Поддержка семейства свойств border-radius без -moz-префикса и со стандартным синтаксисом.
  • Поддержка свойства box-shadow без -moz-префикса.
  • Поддержка CSS Transitions: возможность создания простых анимаций без привлечения JavaScript. Можно использовать, например, для плавной подсветки пункта меню при наведении указателя.
  • -moz-calc(): возможность использовать смешанные единицы в численных значениях CSS-свойств. Например, width: -moz-calc(100% - 200px). Без этой возможности аналогичного эффекта можно было достигнуть только двумя вложенными элементами в сочетании с использованием отрицательных полей.
  • -moz-element(): возможность использовать любой элемент в качестве фонового изображения другого элемента.
  • :-moz-any(): возможность группировать CSS-селекторы для уменьшения дублирования кода (в настоящее время CSS представляет собой практически сплошное дублирование кода). Например, вместо #example LI, #example A можно написать #example :moz-any(LI, A). (Следует иметь в виду, что реализация экспериментальная, и в ней, в частности, не вполне корректно определяется специфичность селекторов.) Стандарту CSS таких, казалось бы, логичных возможностей сильно не хватает. Может быть, теоретики из CSS WG оценят пользу этой возможности на практике и добавят что-нибудь подобное в спецификацию CSS.

JavaScript и разработка

  • Поддержка новых возможностей JavaScript 1.8.5, в том числе:
    • поддержка strict-режима ECMAScript 5;
    • новый метод Array.isArray(), позволяющий точно определить, является ли объект массивом;
    • глобальные свойства NaN, Infinity и undefined сделаны доступными только для чтения.
  • Встроенная отладочная консоль, поддерживающая отладочные методы типа console.log() и проч.
  • Новый способ представления чисел в JavaScript, позволяющих Firefox исполнять сложный код (используемый, например, в графике и анимации) более эффективно в плане быстродействия.
  • Поддержка типизированных массивов (typed arrays), хранящих числа определённого типа и размера и позволяющих работать с двоичными данными напрямую. Ранее в качестве буферов данных в подобных случаях использовались строки, а для чтения отдельных байтов применялся метод charCodeAt(), но этот подход был подвержен ошибкам и был не слишком эффективен в плане быстродействия. Типизированные массивы также поддерживаются в WebKit-браузерах.

Безопасность

  • Устранена потенциальная уязвимость, проявлявшаяся во всех браузерах и заключавшаяся в возможности узнать, посещал ли пользователь конкретный сайт, путём проверки вычисленных CSS-параметров посещённых ссылок (:visited) (см. также статью на hacks.mozilla.org), имеющих, например, размер, существенно отличающийся от ссылок непосещённых.
  • Поддержка HTTP-заголовка ответа сервера X-Frame-Options для защиты от Clickjacking-атак. Суть таких атак состоит в отображении собственных поддельных элементов поверх фрейма, куда загружена страница с другого сайта, с целью заставить пользователя думать, что он находится на другом сайте, и, возможно, таким образом получить его конфиденциальные данные. В поддерживающих X-Frame-Options браузерах значение SAMEORIGIN разрешает отображение страниц только во фреймах, расположенных на страницах того же домена, а значение DENY запрещает отображение страницы внутри фреймов вовсе.
  • При удалении cookies с помощью пункта меню «Стереть недавнюю историю» теперь удаляются и Flash-cookies (аналог cookie, использующийся в рамках Flash-приложений) — при условии, что установлен Flash Player версии 10.2 или выше, где поддерживаются соответствующие API-функции.

Интерфейс

  • Кнопка Firefox: можно переключиться в режим, в котором вместо традиционного меню отображается так называемая кнопка Firefox (аналог Windows-кнопки «Пуск» в масштабах отдельного приложения), содержащая структурированные пункты меню. Это высвобождает дополнительное пространство, ранее статично занимавшееся меню. В режиме приватного просмотра кнопка приобретает дополнительную функциональную нагрузку: становится фиолетовой. К сожалению, в меню кнопки Firefox доступны не все возможности традиционного меню: например, нет важнейшего подменю «Стиль страницы», позволяющего выбирать альтернативные таблицы стилей либо отключать стили вовсе, а также подменю «Инструменты», нередко являющегося единственным способом доступа к функциональности отдельных расширений. К счастью, вопрос решается расширением Personal Menu, позволяющим копировать пункты из основного меню в меню кнопки Firefox.
  • Вкладки можно расположить над адресной строкой. Более того, в «режиме кнопки Firefox» в полноэкранном режиме вкладки располагаются на заголовочной панели окна браузера, высвобождая дополнительное пространство экрана для отображения страниц. Вкладки при этом плотно прилегают к верхнему краю экрана, что значительно облегчает попадание в них указателем мыши, повышая удобство пользователя.
  • Вкладку можно сузить до favicon-значка путём выбора пункта «Закрепить вкладку» в её контекстном меню. Такая вкладка автоматически располагается слева от остальных вкладок, и её нельзя закрыть. Ранее аналогичная возможность была доступна в расширении FaviconizeTab, которое может быть полезным и в Firefox 4: в отличие от встроенной возможности, в FaviconizeTab вкладка не меняет своего расположения и может находиться в том числе и между обычными вкладками.
  • Теперь можно произвольно изменять размер многострочных текстовых полей (textarea). Возможность может быть отключена на уровне стилей страницы при помощи свойства -moz-resize, поддержка которого реализована параллельно.
  • Предположительно (надо понаблюдать) исправлена давняя проблема: факт одновременности нажатия Ctrl и щелчка по ссылке фиксировался не в момент щелчка, а только тогда, когда соответствующий ресурс начинал загружаться. Это нередко приводило к незапланированному открытию ссылки не в новой, а в той же вкладке.
  • Диалоги alert() и confirm() теперь модальны не в масштабе всего браузера, а лишь в рамках содержимого отдельной вкладки. Это позволяет исключить потерю контроля над браузером в случае попадания пользователя на злонамеренно или ошибочно созданную страницу, автоматически открывающую новый диалог сразу после закрытия предыдущего — в таких случаях теперь можно просто закрыть вкладку. К сожалению, текст сообщений в таких диалогах теперь (будем надеяться, временно) можно выделить только мышью: нет ни контекстного меню ни возможности выделить весь текст привычным клавиатурным сочетанием Ctrl+A.
  • Панель состояния заменена на панель дополнений. Адрес ссылки при наведении на неё указателя теперь показывается в динамически всплывающем блоке в левой нижней части окна браузера.
  • При открытии предыдущей или следующей страниц в новой вкладке соответствующая цепочка истории посещений теперь наследуется в новую вкладку.
  • При помощи перетаскивания ссылку теперь можно открыть не только в существующей вкладке или в конце списка вкладок, а в произвольном месте панели вкладок.
  • Единственная открытая вкладка теперь снова снабжена кнопкой закрытия при выбранной конфигурационной настройке browser.tabs.closeWindowWithLastTab. Ранее закрытие последней вкладки для получения вида браузера, эквивалентного только что запущенному, было возможно только с помощью клавиатуры.
  • Поддержка прикосновений в Windows 7.
  • При закрытии Firefox при открытом диспетчере загрузок при отсутствии активных загрузок окно диспетчера загрузок автоматически закрывается вместе с окном браузера.
  • При наведении указателя мыши на подписи (label) к элементам формы, имеющим тип radio, checkbox или select, соответствующие элементы теперь подсвечиваются так, как при наведении указателя непосредственно на них. Такое поведение является стандартным для ОС (для Windows — при наведении и нажатии, для Mac OS X — при нажатии), и теперь Firefox интегрирован с ОС ещё более тесно.
  • Скрытые элементы теперь не копируются в буфер обмена.
  • Возможность открыть как ссылку выделенный URL-адрес, не размеченный как HTML-ссылка, при помощи контекстного меню.
  • Устранено кратковременное появление фона окна в области отображения страницы при добавлении вкладок, что приводило к не очень приятному эффекту, воспринимавшемуся как мерцание.
  • Сомнительное изменение: удобный индикатор, ранее отображавшийся в правой части адресной строки и позволявший одним мгновенно определить наличие RSS- или Atom-ленты на странице, теперь спрятан в меню «Закладки».

Рендеринг

  • Теперь по умолчанию изображения внутри ссылок не имеют рамки. Что касается удобства такого решения — существуют разные точки зрения, однако в плане эстетики ранее это нередко было единственным, что портило внешний вид правильно свёрстанных страниц при их просмотре с отключёнными стилями
  • Исправлен неправильный рендеринг квадратных маркеров в списках, проявлявшийся в том, что некоторые маркеры имели чуть бОльшую высоту, чем другие, превращаясь из квадратов в вертикально ориентированные прямоугольники.
  • Рамка у активной ссылки при навигации мышью теперь по умолчанию отсутствует и появляется при первом нажатии клавиши Tab как признаке перехода от мыши к навигации клавиатурной.
  • Устранён баг, проявлявшийся в самоустраняющемся наезжании текста на обтекаемое изображение с не заданными явно размерами, располагающихся в контейнере с внутренними отступами (padding). Для обхода этой ошибки приходилось заключать содержимое контейнера в дополнительный блок.

Установка

В отличие от предыдущих версий, после прямого обновления с версии 3.6 до 4.0 у автора перестали работать все расширения. При этом они исчезли из списка установленных расширений, но их переустановка/обновление были невозможны — при попытке это сделать просто ничего не происходило. (См. баг-репорт.) Решилось ручной очисткой папки extensions в папке профиля и повторной установкой нужных расширений. Возможно, это как-то связано с новой парадигмой установки расширений прямо в упакованном виде, призванной заметно ускорить запуск браузера за счёт значительного уменьшения количества читаемых при этом с диска файлов.


См. также: