Это всего лишь краткая версия основного выступления Сета Томпсона « V8, расширенный JavaScript и новый рубеж производительности (Google I / O '17) ».

Как вы, возможно, знаете (или не знаете), в браузере Chrome есть движок V8, который компилирует ваш JS-код в машинный код с помощью JIT (своевременная компиляция). Он генерирует более быстрый машинный код, но вы платите за более длительную начальную задержку (инициализацию вашего JS-кода).

Таким образом, чем больше оптимизаций кода V8, тем больше потребление памяти V8.

Еще в 2015 году двигатель V8 выглядел так:

В 2016 году Google добавил WebAssembly (бывший ASM.js).

В этом году Google снова оптимизировал V8, и у нас появился новый упрощенный конвейер выполнения, который в основном состоит из Ignition и TurboFan.

Первый, Ignition, представляет собой интерпретатор, который компилирует ваш JS-код в байт-код и сохраняет память на всех платформах (а не только на мобильных устройствах с малым объемом памяти).

Второй - Turbofan, оптимизирующий компилятор, полностью поддерживающий ES2015 +.

Таким образом, Ignition компилирует ваш JS-код в байт-код и отправляет его в TurboFan для оптимизации. В итоге вы получаете полностью оптимизированный для исполнения байт-код.

Но есть еще одна часть (которая не представлена ​​на графике) под названием Ориноко.

Orinoco - это параллельный и параллельный сборщик мусора (предыдущий сборщик мусора не всегда был параллельным, поэтому Orinoco быстрее предыдущего).

Итак, какие преимущества мы получаем от этого нового V8? Ну очевидно прирост быстродействия. По тестам с Спидометром (эталонный инструмент) прирост достигает 35%.

Но давайте немного поговорим о функциях ES2015 +.

Первоначально, когда функция из ES2015 была реализована в V8, они были намного медленнее, чем транспилированные версии (код ES5). Надеюсь, с новым V8 все это в прошлом, и многие функции ES2015 + работают так же быстро, как и перенесенные версии.

Есть и хорошие новости для поклонников Node.js.

Отладка Node-приложений также стала намного проще:

Но самой важной особенностью для меня было покрытие. Эта функция показывает количество неиспользуемого кода и даже отмечает неиспользуемые блоки кода (доступно в Chrome Canary).

Напоследок несколько анонсов о WebAssembly. Не поддержка браузера намного лучше:

В ближайшем будущем производительность кода WebAssembly будет увеличена, будет добавлена ​​многопоточность, и ее можно будет использовать с такими функциями ES2015, как объект Response.

В целом, причин не использовать собственный код ES2015 становится все меньше и меньше, потому что теперь он работает почти так же быстро, как транслируемый код. А новая, еще более быстрая версия V8 позволяет вам предоставить вашим любимым пользователям лучший опыт работы в Интернете.