Firefox 3.5

30 июня 2009 г. выпущена финальная версия, пожалуй, лучшего на сегодня браузера — Firefox 3.5. Ей традиционно стала последняя стабильная RC-версия — RC3.

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

CSS, HTML

  • Поддержка загрузки произвольных шрифтов (TrueType и OpenType), заданных на уровне CSS.
  • Поддержка интереснейшего механизма CSS media queries, дающего возможность назначать индивидуальные таблицы стилей в зависимости от характеристик устройства вывода — например, доступной глубины цвета экрана, его размера, размера окна браузера и проч.
  • Поддержка CSS-свойств text-shadow и -moz-box-shadow, добавляющих тень к символам текста и целиком элементу соответственно.
  • От экспериментального CSS-свойства -moz-opacity, отвечающего за степень прозрачности элемента, полностью отказались в пользу стандартного opacity. (Вплоть до Firefox 3 поддерживались оба свойства.) К слову, поддержки этого полезнейшего свойства до сих пор нет в IE — даже в недавно вышедшем Internet Explorer 8 для аналогичной цели по-прежнему предлагается проприетарный и сопряжённый с некоторыми проблемами «костыль» filter:alpha(opacity=xx), в то время как стандартное CSS-свойство opacity поддерживается уже во всех остальных браузерах: Firefox, Opera, Safari, Chrome.
  • Поддержка экспериментального CSS-свойства -moz-transform, позволяющего, например, поворачивать элемент вокруг воображаемой оси, перпендикулярной экрану.
  • Поддержка HTML-элементов audio и video из текущей черновой спецификации HTML 5, позволяющих вставлять на веб-страницы звук и видео и воспроизводить их встроенными средствами браузера без привлечения сторонних средств типа Flash. В рамках элемента audio поддерживаются аудиоролики в формате Ogg Vorbis, а для использования с элементом video выбран открытый формат Ogg Theora. Нельзя не выразить сожаление по поводу отсутствия поддержки современного, высококачественного и уже ставшего стандартом де-факто сжатия видео H.264 (в стандартном контейнере MP4 или не менее широко используемом и при этом открытом MKV). Поддержка этого формата (в контейнере MP4) уже есть в Flash Player начиная с версии 9.0.115, выпущенной в конце 2007 г. Существуют также открытые реализации как программ для кодирования — x264, так и декодеров — например, FFDShow Tryouts. Тем не менее, в качестве причины называются именно проблемы лицензионного характера. Впрочем, так или иначе, это не делает появление возможности воспроизведения медиафайлов встроенными средствами браузера менее знаковым событием.

JavaScript, DOM

  • Новый движок интерпретации JavaScript — TraceMonkey, главной отличительной особенностью которого является применение так называемой JIT-компиляции, обеспечивающей существенное — вплоть до 20-кратного — повышение скорости исполнения JavaScript-сценариев. По тестам, TraceMonkey работает быстрее, чем движок V8, используемый в браузере Google Chrome. К сожалению, по умолчанию JIT-компиляция включена только для скриптов в составе веб-страниц, а скрипты графического интерфейса и расширений ей не подвергаются, однако можно включить её вручную, установив в значение true параметр javascript.options.jit.chrome в окне настроек, доступном по псевдоадресу about:config.
  • Встроенная поддержка кодирования и декодирования данных в формате JSON с использованием методов parse и stringify нового стандартного объекта JSON. По сравнению с простым использованием стандартной JavaScript-функции eval, предназначенной для интерпретации произвольного JavaScript-кода в виде строки, это позволяет безопасно декодировать объекты JSON (декодируются данные, но не исполняемые скрипты, потенциально деструктивные при получении из ненадёжных источников), работает почти втрое быстрее, чем при использовании eval, и во много раз быстрее, чем существующие реализации на чистом JavaScript.
  • Поддержка новых методов JavaScript-объекта String: trim, trimLeft и trimRight, работающих аналогично чрезвычайно удобным и часто используемым функциям trim, ltrim и rtrim из популярного серверного скриптового языка PHP и предназначенных для удаления всех пробельных символов (пробел, табуляция, перевод строки и проч.) по краям переданной строки. К сожалению, в отличие от соответствующих функций PHP, JavaScript-функции в данный момент ориентированы только на пробельные символы и не поддерживают удаление произвольных символов, как это предусмотрено в соответствующих PHP-функциях.
  • Поддержка JavaScript-методов querySelector и querySelectorAll из чернового варианта спецификации Selectors API, позволяющих осуществлять выборку элементов из DOM-дерева с помощью наглядных и компактных CSS-селекторов. Ранее существовали лишь реализации на чистом JavaScript в рамках библиотек типа jQuery, в то время как встроенная в браузер реализация работает многократно быстрее. Уместно заметить, что возможности такой выборки закономерно ограничены уровнем поддержки CSS-селекторов в конкретном браузере.
  • Поддержка удобных JavaScript-методов для доступа к элементам (в противоположность любым узлам — например, текстовым): children, childElementCount, firstElementChild, lastElementChild, nextElementSibling, previousElementSibling. Ранее для этого приходилось перебирать узлы стандартными средствами DOM и проверять каждый из них на предмет того, является ли он элементом. Новые методы (помимо банального удобства) работают, несомненно, гораздо быстрее.
  • Поддержка так называемых web workers — запуска и работы определённых (не модифицирующих DOM-дерево) JavaScript-функций в фоновом режиме — без влияния на отзывчивость веб-приложения в целом.

Прочее

  • Включена поддержка цветовой коррекции ICC для изображений, содержащих соответствующую служебную информацию.
  • Устранена ошибка, из-за которой при обновлении страницы нажатием клавиши F5 не запоминалась позиция прокрутки до обновления страницы при наличии HTTP-заголовка ответа сервера Cache-Control: no-store. (При полном принудительном обновлении нажатием CTRL+F5 позиция, увы, по-прежнему сбрасывается.)
  • Реализовано автодополнение меток при добавлении закладок. К сожалению, в случае совпадения набираемой метки с уже существующей сбрасывается позиция каретки в поле ввода меток.
  • Новый режим работы «Приватный просмотр» (Private Browsing), временно отключающий запись истории посещений, cookie и проч. Ранее аналогичная функциональность достигалась использованием расширений типа Stealther.
  • Интересная функция DNS prefetching, ускоряющая переход по ссылкам на странице путём автоматического получения IP-адресов соответствующих сайтов заранее, ещё до реального перехода пользователя по ссылкам на просматриваемой странице и исключая, таким образом, задержки отклика DNS-серверов при действительном переходе по ссылкам.

P. S. Кстати, в Firefox есть возможность вставки на страницу отдельных файлов, загруженных с сайта в виде единого jar-/zip-архива. Такой способ экономии HTTP-запросов лишён недостатков CSS-спрайтов и обладает несравненно большей гибкостью (в архив можно поместить любые файлы, и нет необходимости объединять изображения разного размера в единый графический файл). Не хватает лишь широкой поддержки в остальных браузерах. ;-)