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-атрибутов у элементов форм, в частности:
autofocus
;required
,placeholder
у текстовых полей;maxlength
у элементаtextarea
;
- интересный факт: в 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 в папке профиля и повторной установкой нужных расширений. Возможно, это как-то связано с новой парадигмой установки расширений прямо в упакованном виде, призванной заметно ускорить запуск браузера за счёт значительного уменьшения количества читаемых при этом с диска файлов.
См. также: