Компания Google представила (https://chromereleases.googleblog.com/2019/04/stable-channel...) релиз web-браузера Chrome 74 (http://www.google.com/chrome). Одновременно доступен (https://www.chromium.org/developers/calendar) стабильный выпуск свободного проекта Chromium (http://dev.chromium.org/), выступающего основой Chrome. Браузер Chrome отличается (https://code.google.com/p/chromium/wiki/ChromiumBrowserVsGoo...) использованием логотипов Google, возможностью загрузки модуля Flash по запросу, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого видеоконтента, системой автоматической установки обновлений и передачей при поиске RLZ-параметров (https://www.opennet.dev/opennews/art.shtml?num=26822). Следующий выпуск Chrome 75 запланирован на 4 июня.Основные (https://support.google.com/chrome/a/answer/7679408) изменения (https://productforums.google.com/forum/#!forum/chrome) в (https://blog.chromium.org/2019/03/chrome-74-beta-reducing-un...) Chrome (https://developers.google.com/web/updates/2019/) 74 (https://v8.dev/blog/v8-release-74):
- При наступлении события onUnload, вызываемого при закрытии страницы, теперь запрещено (https://developers.google.com/web/updates/2018/12/chrome-72-...) выводить всплывающие окна (блокируется вызов window.open()), что позволит защитить пользователей от принудительного открытия рекламных страниц после закрытия сомнительных сайтов;
- В JavaScript-движке реализована (https://v8.dev/blog/v8-release-74) появился новый режим JIT-less (https://v8.dev/blog/jitless) (флаг "--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 реализована (https://developers.google.com/web/updates/2018/10/wasm-threads) поддержка потоков и атомарных операций (API WebAssembly Threads и WebAssembly Atomics);
- Для обособленной поставки скриптов добавлена поддержка заголовка "#!", определяющего интерпретатор для запуска. Например, по аналогии с другими скриптовыми языками, файл JavaScript может выглядеть примерно так:
#!/usr/bin/env node
console.log(42);
- В CSS добавлен новый media-запрос "prefers-reduced-motion (https://drafts.csswg.org/mediaqueries-5/#prefers-reduced-motion)", позволяющий сайту определить состояние настроек в операционной системе, связанных с отключением анимированных эффектов. При помощи предложенного запроса владелец сайта может (https://developers.google.com/web/updates/2019/03/prefers-re...) узнать, что пользователь отключил у себя анимированные эффекты и также отключить различные анимационные возможности на сайте, например, убрать эффект дрожания кнопок, используемых для привлечения внимания;
- В дополнение к появившейся в Chrome 72 возможности определения публичных полей реализована поддержка (https://developers.google.com/web/updates/2018/12/class-fields) пометки полей приватными, после чего доступ к их значениям будет открыт только внутри класса. Для пометки поля приватным следует указать перед именем поля знак "#". Как и в случае с публичными полями приватные свойства не требуют явного использования конструктора.
- HTTP-заголовок Feature-Policy, позволяющий управлять поведением API и включением определённых возможностей (например, можно включить синхронный режим работы XMLHttpRequest или отключить Geolocation API), дополнен JavaScript API (https://developers.google.com/web/updates/2018/06/feature-po...) для контроле активности тех или иных возможностей. Для разработчиков предложено два новых метода document.featurePolicy и frame.featurePolicy, предлагающих три функции:
allowedFeatures() для получения списка разрешённых для текущего домена функций, allowsFeature() для выборочной проверки включения конкретных возможностей и getAllowlistForFeature() для вывода списка доменов, для которых на текущей странице разрешена указанная возможность;
- Добавлена экспериментальная ("chrome://flags#enable-text-fragment-anchor") поддержка режима Scroll-To-Text (https://www.opennet.dev/opennews/art.shtml?num=50156), позволяющего формировать ссылки на отдельные слова или фразы, без явного указания в документе меток при помощи тега "a name" или свойства "id". Для передачи ссылки предлагается специальный параметр "#targetText=", в котором можно указать текст для перехода. Допускается указание маски, включающей фразы, указывающие на начало и конец фрагмента с использованием запятой в качестве их разделителя (например, "example.com#targetText=start%20words, end%20words");
- В конструктор AudioContext добавлена опция sampleRate (https://www.chromestatus.com/feature/5136778254090240), позволяющая установить делаемую частоту дискретизации для операций со звуком через Web Audio API;
- Добавлена поддержка класса Intl.Locale ([https://www.chromestatus.com/feature/4936310187884544), предоставляющего методы для разбора и обработки выставляемых локалью параметров языка, региона и начертания, а также для чтения и записи тегов расширений Unicode, сохранения пользовательских настроек локали в сериализированном формате;
- Механизм Signed HTTP Exchanges (https://wicg.github.io/webpackage/draft-yasskin-http-origin-...) (SXG) расширен средствами для информирования (https://www.chromestatus.com/feature/5687904902840320) распространителей контента об ошибках загрузки подписанного контента, таких как проблемы с верификацией сертификатов. Обработка ошибок производится через расширения API Network Error Logging (https://developers.google.com/web/updates/2018/09/reportinga...). Напомним, что SXG позволяет (https://www.opennet.dev/opennews/art.shtml?num=50033) владельцу одного сайта при помощи цифровой подписи авторизовать размещения определённых страниц на другом сайте, после чего в случае обращения к этим страницам на втором сайте, браузер будет показывать пользователю URL исходного сайта, несмотря на то, что страница загружена с другого хоста;
- В класс ...
URL: https://chromereleases.googleblog.com/2019/04/stable-channel...
Новость: https://www.opennet.dev/opennews/art.shtml?num=50559