🔥

Тред (Андрей Нагих)


Итак, наш исходный код мы компилируем в байткод WebAssembly. Этот байткод портативный, т.е. не зависит от архитектуры компьютера на котором выполняется. Также он не зависит от конкретной машины JS в браузере. 🚀Это огромный плюс, особенно в мире модулей Node.js

Перед запуском браузер снова компилирует его в другой байткод — своей виртуальной машины JS. 🚀 Важно сделать это как можно быстрее. Поэтому есть два компилятора: быстрый (baseline), но производящий неоптимальный код — он работает первым.

И медленный, выдающий оптимизированный код. Он работает уже после старта приложения, и нагорячую подменяет байткод. v8.dev/blog/liftoff

Кстати в FireFox такая архитектура появилась раньше, чем в Chrome. Lin Clark отлично написала почему это важно hacks.mozilla.org/2018/01/making…

Lin Clark @linclark это ещё один человек в мире Wasm за которым обязательно нужно следить. Она пишет великолепно иллюстрированные статьи о внутреннем устройстве Wasm в блоге Mozilla Haks. hacks.mozilla.org/category/webas…

🚀 Ещё одна фишка для ускорения старта — это потоковая компиляция. Супер полезная вещь: представьте, ваш код начинает компилироваться даже пока ещё целиком не скачался.

🚀 И это ещё не всё. В браузерном API разделены стадии компиляции модуля и его инстанцирования. Это значит, что вы можете закешировать результат компиляции у пользователя. Это сделает повторные запуски приложения молниеносными.