24 апреля 2019 года

Компания Google представила релиз web-браузера Chrome 74. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается использованием логотипов Google, возможностью загрузки модуля Flash по запросу, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого видеоконтента (DRM), системой автоматической установки обновлений и передачей при поиске RLZ-параметров. Следующий выпуск Chrome 75 запланирован на 4 июня.

Основные изменения в Chrome 74:

  • При наступлении события onUnload, вызываемого при закрытии страницы, теперь запрещено выводить всплывающие окна (блокируется вызов window.open()), что позволит защитить пользователей от принудительного открытия рекламных страниц после закрытия сомнительных сайтов. Подобная блокировка ранее была реализована на уровне popup blocker, но теперь будет работать независимо от его включения;
  • В JavaScript-движке V8 реализован новый режим JIT-less (флаг "--jitless"), дающий возможность выполнить JavaScript без применения JIT (используется только интерпретатор) и без выделения исполняемой памяти в процессе выполнения кода. Отключение JIT может быть полезным для повышения безопасности при работе с потенциально опасными web-приложениями, а также для обеспечения сборки на платформах, запрещающих использование JIT (например, в iOS, на некоторых Smart TV и игровых консолях). При отключении JIT производительность выполнения JavaScript снижается на 40% в тесте Speedometer 2.0 и на 80% в тесте Web Tooling Benchmark, но при симуляции работы с YouTube отмечено снижение производительности лишь на 6%. Потребление памяти при этом уменьшается незначительно, всего на 1.7%;
  • В V8 предложена большая порция новых оптимизаций. Например, на 60% ускорено выполнение вызовов функций, в которых число фактически переданных параметров не соответствует указанному при определении функции числу аргументов. Ускорен доступ к свойствам DOM при помощи функции get, что положительно повлияло на производительность фреймворка Angular. Ускорена работа парсинга JavaScript: оптимизация декодировщика UTF-8 позволила поднять производительность парсера в режиме streaming (разбор по мере загрузки) на 8%, а исключение лишних операций дедупликации дало прирост ещё на 10.5%;
  • Проведена работа по снижению потребления памяти движка JavaScript.

Добавлен код для очистки кэша байткода, который занимает примерно 15% от всего размера кучи. В сборщик мусора добавлена стадия для вытеснения из кэша скомпилированного байткода для редко используемых функций или функций, вызываемых только при инициализации. Решение о чистке принимается на основании новых счётчиков, учитывающих последнее время обращения к байткоду. Указанное изменение позволило снизить потребление памяти на 5–15% без негативного влияния на производительность. Дополнительно, в компиляторе байткода исключена генерация заведомо неиспользуемого кода, например, который следует после return или break (если на него нет Jump-перехода);

  • Для WebAssembly реализована поддержка потоков и атомарных операций (API WebAssembly Threads и WebAssembly Atomics);
  • Для обособленной поставки скриптов в движке V8 добавлена поддержка заголовка "#!", определяющего интерпретатор для запуска. Например, по аналогии с другими скриптовыми языками, файл JavaScript может выглядеть примерно так:

#!/usr/bin/env node
console.log(42);

  • В CSS добавлен новый media-запрос "prefers-reduced-motion", позволяющий сайту определить состояние настроек в операционной системе, связанных с отключением анимированных эффектов. При помощи предложенного запроса владелец сайта может узнать, что пользователь отключил у себя анимированные эффекты и также отключить различные анимационные возможности на сайте, например, убрать эффект дрожания кнопок, используемых для привлечения внимания;
  • В дополнение к появившейся в Chrome 72 возможности определения публичных полей в классах реализована поддержка пометки полей приватными, после чего доступ к их значениям будет открыт только внутри класса. Для пометки поля приватным следует указать перед именем поля знак "#". Как и в случае с публичными полями приватные свойства не требуют явного использования конструктора;
  • HTTP-заголовок Feature-Policy, позволяющий управлять поведением API и включением определённых возможностей (например, можно включить синхронный режим работы XMLHttpRequest или отключить Geolocation API), дополнен JavaScript API для контроля активности тех или иных возможностей. Для разработчиков предложено два новых метода document.featurePolicy и frame.featurePolicy, предлагающих три функции:

allowedFeatures() для получения списка разрешённых для текущего домена функций, allowsFeature() для выборочной проверки включения конкретных возможностей и getAllowlistForFeature() для вывода списка доменов, для которых на текущей странице разрешена указанная возможность;

  • Добавлена экспериментальная ("chrome://flags#enable-text-fragment-anchor") поддержка режима Scroll-To-Text, позволяющего формировать ссылки на отдельные слова или фразы, без явного указания в документе меток при помощи тега "a name" или свойства "id". Для передачи ссылки предлагается специальный параметр "#targetText=", в котором можно указать текст для перехода. Допускается указание маски, включающей фразы, указывающие на начало и конец фрагмента с использованием запятой в качестве их разделителя (например, "example.com#targetText=start%20words, end%20words");
  • В конструктор AudioContext добавлена опция sampleRate, позволяющая установить желаемую частоту дискретизации для операций со звуком через Web Audio API;
  • Добавлена поддержка класса Intl.Locale, предоставляющего методы для разбора и обработки выставляемых локалью параметров языка, региона и начертания, а также для чтения и записи тегов расширений Unicode и сохранения пользовательских настроек локали в сериализированном формате;
  • Механизм Signed HTTP Exchanges (SXG) расширен средствами для информирования распространителей контента об ошибках загрузки подписанного контента, таких как проблемы с верификацией сертификатов. Обработка ошибок производится через расширения API Network Error Logging. Напомним, что SXG позволяет владельцу одного сайта при помощи цифровой подписи авторизовать размещения определённых страниц на другом сайте, после чего в случае обращения к этим страницам на втором сайте, браузер будет показывать пользователю URL исходного сайта, несмотря на то, что страница загружена с другого хоста;
  • В класс TextEncoder добавлен метод encodeInto(), позволяющий записать закодированную строку напрямую в предварительно выделенный буфер. Метод encodeInto() является высокопроизводительной альтернативой методу encode(), который требует выполнения операции выделения буфера при каждом обращении;
  • В Service worker обеспечена буферизация вызова client.postMessage() до момента готовности документа. Сообщения, отправленные через client.postMessage(), будут удержаны до стадии генерации события DOMContentLoaded, установки "onmessage" или вызова startMessages();
  • В соответствии с требованием спецификации CSS Transitions добавлены события "transitionrun", "transitioncancel", "transitionstart" и "transitionend", генерируемые когда CSS-переход помещен в очередь, отменяется, начинает или заканчивает выполняться.
  • При указании через overrideMimeType() или MIME-тип некорректной кодировки символов для запроса XMLHttpRequest, теперь осуществляется откат на UTF-8 вместо Latin-1;
  • Объявлено устаревшим и будет удалено в одном из следующих выпусков свойство "allow-downloads-without-user-activation", через которое можно было организовать автоматическую загрузку файлов при обработке iframe. В будущем инициирование загрузки файлов без явного действия пользователя будет запрещено, так как оно активно применялось для злоупотреблений, навязывания загрузок и подстановки частей вредоносного ПО на компьютер пользователя. Для начала загрузки обязательно потребуется клик пользователя на той же странице. Изначально свойство планировалось удалить в Chrome 74, но удаление было отложено до Chrome 76;
  • Для платформы Windows предложена опциональная тёмная тема оформления интерфейса (в прошлом выпуске тёмное оформление было подготовлено для macOS). Так как тёмное оформление почти идентично оформлению в режиме инкогнито, для выделения приватного режима работы вместо пиктограммы профиля пользователя добавлен специальный индикатор, на котором также отображается число окон, открытых в режиме инкогнито;
  • Для корпоративных пользователей добавлена возможность Chrome Browser Cloud Management для управления настройками браузеров пользователей через консоль Google Admin;
  • В версии для Android на смену "Data Saver" пришёл режим "Lite". Поддержка Data Saver в Chrome 74 прекращена. Режим Lite можно включить в настройках (Settings Lite mode), но если до этого был включен "Data Saver" режим Lite будет активирован автоматически. Напомним, что режим Lite

позволяет ускорить загрузку сайтов и сократить трафик за счёт обращения через прокси в Google, на лету осуществляющий оптимизацию запрашиваемых страниц для просмотра на мобильном устройстве. На серверы Google передаётся только URL страницы, а Cookies и параметры аутентификации обрабатываются напрямую. Оптимизация выполняется адаптивно, например, если страница загружается более 5 секунд;

  • Расширены возможности инструментов для web-разработчиков:
  • При наведении курсора к CSS-свойствам, таким как padding и margin, теперь автоматически подсвечиваются на странице все элементы, на которые данные свойства влияют;
  • Панель аудита обновлена до выпуска Lighthouse 4;
  • Добавлен просмотрщик содержимого бинарных сообщений, передаваемых через WebSocket;
  • Добавлена возможность быстрого вызова инструмента для создания скриншотов из строки ввода команд (достаточно набрать "area" или screenshot и выбрать "Capture area screenshots";
  • В панели анализа сетевых запросов добавлен фильтр для просмотра запросов, специфичных для определённого Service worker;
  • Обновлена панель для оценки производительности: добавлен индикатор длительно выполняемых задач, на шкале времени реализована метка первой отрисовки;
  • Добавлена экспериментальная опция LazyLoad ("chrome://flags/#enable-lazy-image-loading" и "chrome://flags/#enable-lazy-frame-loading"), при включении которой браузер не загружает iframes и изображения, находящиеся вне видимой области, до тех пор пока пользователь не прокрутит содержимое страницы в область, непосредственно предшествующую им. Новый режим позволяет сократить потребление памяти, снизить трафик и увеличить скорость начального открытия страниц.

Кроме нововведений и исправления ошибок в новой версии устранено 39 уязвимостей. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity (Архивная копия от 28 октября 2020 на Wayback Machine), LibFuzzer (Архивная копия от 28 октября 2020 на Wayback Machine) и AFL. Критических проблем, которые позволяют обойти все уровни защиты браузера и выполнить код в системе за пределами sandbox-окружения, не выявлено. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 19 премии на сумму 26837 долларов США (четыре премии $3000, четыре премии $2000, одна премия $1337, четыре премии $1000, три премии $500). Размер 4 вознаграждений пока не определён.

Источники

править
 
 
Creative Commons
Эта статья содержит материалы из статьи «Релиз Chrome 74», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.