Реліз Chrome 74

компанія Google представила реліз web-браузера Chrome 74. Одночасно доступний стабільний випуск вільного проекту Хром, що є основою Chrome. Браузер Chrome відрізняється використанням логотипів Google, можливістю завантаження модуля Flash на запит, наявністю системи відправлення повідомлень у разі краху, модулями для відтворення захищеного відеоконтенту, системою автоматичної установки оновлень та передачею при пошуку RLZ-параметрів. Наступний випуск Chrome 75 заплановано на 4 червня.

Основні зміни в Chrome 74:

  • При настанні події onUnload, що викликається при закритті сторінки, тепер заборонено виводити спливаючі вікна (блокується виклик window.open()), що дозволить захистити користувачів від примусового відкриття рекламних сторінок після закриття сумнівних сайтів;
  • У JavaScript-движку реалізована з'явився новий режим 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-переходу);

    Реліз Chrome 74

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

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

  • У CSS додано новий media-запит «prefers-reduced-motion«, що дозволяє сайту визначити стан налаштувань в операційній системі, пов'язаних із вимкненням анімованих ефектів. За допомогою запропонованого запиту власник сайту може дізнатися, що користувач відключив у себе анімовані ефекти і відключити різні анімаційні можливості на сайті, наприклад, прибрати ефект тремтіння кнопок, що використовуються для привернення уваги;
  • На додаток до можливості визначення публічних полів, що з'явилася в Chrome 72 реалізована підтримка позначки полів приватними, після чого доступ до їх значень буде відкритий лише всередині класу. Для позначення поля приватним слід зазначити перед ім'ям поля знак «#». Як і у випадку з громадськими полями приватні характеристики не вимагають явного використання конструктора.
  • HTTP-заголовок Feature-Policy, що дозволяє керувати поведінкою API та включенням певних можливостей (наприклад, можна увімкнути синхронний режим роботи XMLHttpRequest або вимкнути Geolocation API), доповнено API JavaScript на контроль активності тих чи інших можливостей. Для розробників запропоновано два нових методи 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 для керування налаштуваннями браузерів користувачів через консоль Google Admin;

    Реліз Chrome 74

Окрім нововведень та виправлення помилок у новій версії усунено 39 вразливостей. Багато вразливостей виявлено в результаті автоматизованого тестування інструментами Адреса Sanitizer, MemorySanitizer, Цілісність потоку керування, LibFuzzer и AFL. Критичних проблем, які дозволяють обійти всі рівні захисту браузера та виконати код у системі за межами sandbox-оточення, не виявлено. У рамках програми з виплати грошової винагороди за виявлення вразливостей для поточного релізу компанія Google виплатила 19 премій на суму 26837 доларів США (чотири премії $3000, чотири премії $2000, одна премія $1337, чотири премії $1000, три премії $500). Розмір 4 винагород поки не визначений.

Джерело: opennet.ru

Додати коментар або відгук