ProIT: медіа для профі в IT
2 хв

V8 отримав підтримку завчасної компіляції JavaScript

author avatar ProIT NEWS

Двигун JavaScript V8, який використовують браузер Chrome, Node.js та інші середовища, отримав нову функцію — можливість завчасної компіляції файлів JavaScript. Якщо цю можливість застосовувати обмежено, вона може суттєво покращити час завантаження сторінки, йдеться в матеріалі DevClass.

У версії Chrome 136, яка нещодавно вийшла, стала доступною підтримка явних підказок до компіляції (explicit compile hints). Розробники можуть додати до початку JS-файла спеціальний коментар:

//# allFunctionsCalledOnLoad

Це дає команду V8 негайно проаналізувати й скомпілювати файл під час його завантаження. Йдеться про так звану eager compilation (завчасну компіляцію). Якщо такого коментаря немає, компіляція відкладається до моменту виклику функції.

Завчасна компіляція виконується у фоновому потоці, тоді як відкладена — у головному, що може впливати на продуктивність.

Інженерка Google Мар’я Гьолтта повідомила, що тести на популярних вебсторінках показали покращення в 17 із 20 випадків, у середньому зменшивши час парсингу й компіляції на передньому плані на 630 мс. Це значний приріст. Початковий час завантаження критично важливий для сприйняття швидкості роботи застосунку.

Гьолтта також описала, як логувати виклики функцій для перевірки ефекту в конкретних кейсах. Зараз нова функція працює лише для повних файлів, але в майбутньому планується надати змогу позначати окремі функції. Вона порекомендувала створити окремий файл із критично важливим кодом і позначити його для завчасної компіляції.

Розроблення функції тривало понад 2 роки. У статті від квітня 2023 року зазначалося, що явні підказки до компіляції перевизначають евристику PIFE (possibly invoked function expressions), яка інакше використовується у V8 для завчасної компіляції всіх функцій у дужках.

Недолік PIFE — вона змушує використовувати лише функціональні вирази й не працює для методів класів ECMAScript 6. Ще одна проблема — надмірне використання.

Гьолтта попередила:

«Цю функцію потрібно використовувати помірковано, адже компіляція великої кількості коду споживатиме час і пам’ять».

Якщо розробники чи оптимізатори почнуть додавати підказку до всього коду, це може мати зворотний ефект — сповільнення завантаження.

Відкладений парсинг (lazy parsing) також має свої переваги. Він пришвидшує запуск і зменшує використання пам’яті в застосунках, які постачають більше коду, ніж їм потрібно. Про це йшлося в попередньому блозі команди V8.

Реакції розробників неоднозначні. Один із них написав:

«За швидкого інтернету час завантаження багатьох важких сайтів значною мірою залежить від парсингу/компіляції JS, тож можливість паралелізації — це круто».

Інший попередив:

«Ці підказки, ймовірно, використовуватимуть надмірно, і зрештою функцію можуть повністю вимкнути».

У першій публікації Google на цю тему згадувалося:

«Ми можемо спробувати виявляти під час виконання сайти, які зловживають підказками, збирати інформацію від користувачів і масштабувати компіляцію для таких сайтів».

Поки немає ознак, що такий механізм буде реалізовано вже в цьому релізі.

Раніше ми повідомляли, що Microsoft оновлює Azure AI Foundry.

Читайте також на ProIT, що ШІ пропонує вигадані бібліотеки.

Підписуйтеся на ProIT у Telegram, щоб не пропустити жодної публікації!

Приєднатися до company logo
Продовжуючи, ти погоджуєшся з умовами Публічної оферти та Політикою конфіденційності.