Итак, наш исходный код мы компилируем в байткод 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 разделены стадии компиляции модуля и его инстанцирования. Это значит, что вы можете закешировать результат компиляции у пользователя. Это сделает повторные запуски приложения молниеносными.