Разработчики V8, движка Google JavaScript, подробно рассказали, как последний выпуск улучшает асинхронные функции и обещания, а также упрощает отладку асинхронного кода.
V8 — это высокопроизводительный движок JavaScript и WebAssembly с открытым исходным кодом от Google, написанный на C ++. Он используется в Chrome и в Node.js и реализует ECMAScript и WebAssembly. Последний выпуск, V8 v7.2, поставляется с более быстрой реализацией async / await, которая включена по умолчанию.
В блоге V8 разработчики Майя Лекова и Бенедикт Мерер объясняют, что исторически асинхронная обработка в JavaScript имела репутацию не очень быстрой. Когда дело доходит до асинхронного программирования, также сложно отлаживать живые приложения JavaScript. Однако улучшения последних версий значительно улучшили положение. Асинхронные функции выполняются быстрее, а производительность асинхронного кода значительно увеличилась между V8 v5.5 (Chrome 55 и Node.js 7) и V8 v6.8 (Chrome 68 и Node.js 10) до такой степени, что теперь вы можете использовать асинхронные методы, не беспокоясь о скорости.
Улучшения производительности основаны на ряде изменений, начиная с оптимизирующего компилятора TurboFan; и сборщик мусора Ориноко. Совсем недавно команда разработчиков использовала то, что они говорят:
«удобная ошибка в Node.js 8, из-за которой await в некоторых случаях пропускал микротики, что приводило к повышению производительности»
Команда формализовала ошибку так, чтобы она преднамеренно возвращалась быстрее, удалив две лишние ненужные микротики, создав обещание-оболочку и разрешив его только тогда, когда эти операции действительно необходимы. В ситуациях, когда значение, переданное в await, уже является обещанием, эти шаги пропускаются. Разработчики также избегают создания одноразовых обещаний, если в этом нет необходимости. Эти изменения значительно сократили накладные расходы на асинхронные функции не только в V8, но и во всех движках JavaScript.
В самом последнем выпуске V8 v7.2 также улучшен синтаксический анализ JavaScript. Инженеры говорят, что в среднем веб-страницы тратят 9,5% времени V8 при запуске на синтаксический анализ JavaScript. Перейдя на использование самого быстрого анализатора JavaScript V8, команда добилась значительного повышения скорости синтаксического анализа по всем направлениям, примерно на 30% при использовании на настольных компьютерах с версии 7.
Полное объяснение улучшений async можно найти в блоге V8.
Ян Эллиот — автор JavaScript Async, который является частью библиотеки I Programmer Library, опубликованной I / O Press.