Состояние Интернета: WebAssembly

Что такое WebAssembly, почему он важен и как он сейчас используется в Интернете?

WebAssembly (WASM) — это новый ассемблерный язык в Интернете, цель которого — позволить разработчикам писать быстрый переносимый код на языке по своему выбору. В настоящее время его можно использовать во всех современных браузерах и Node.js, а также в некоторых средах выполнения только WebAssembly.

Предыстория WebAssembly

Коалиция браузеров создала WebAssembly в 2015 году как преемника asm.js и Google Native Client. Позже, в 2017 году, он был выпущен во всех современных браузерах, а в 2018 году была выпущена официальная спецификация. WebAssembly — это двоичный формат, позволяющий кросс-платформенное выполнение изолированного кода без использования JavaScript. Он также спроектирован так, чтобы быть компактным, анализироваться и выполняться значительно быстрее, чем JavaScript. Его можно использовать в Интернете и на серверах, чтобы обеспечить безопасное и переносимое выполнение кода в изолированной программной среде.

Почему WebAssembly важен

Безопасность

WebAssembly — это изолированный язык, поэтому он безопасен. Такие инструменты, как Wasmer, позволяют запускать WASM вне Интернета с ограниченными системными вызовами и измерением циклов ЦП.

Безопасность WebAssembly привела к тому, что легкие бессерверные функциональные среды, такие как Cloudflare Workers, Fastly [email protected] и WasmEdge, все чаще используют WebAssembly. WebAssembly может быть даже более безопасным, чем JavaScript в Интернете, благодаря простоте компилятора.

В отличие от JavaScript, который имеет сложный трехуровневый JIT-компилятор/среду выполнения, который может быть очень глючным. Напротив, поскольку WebAssembly строго типизирован и ближе к машинному коду, компиляторы для WebAssembly могут быть более простыми и, следовательно, более безопасными. Firefox даже использует WebAssembly для формирования шрифтов из-за его возможностей песочницы.

Скорость

WebAssembly очень быстро обрабатывает и выполняет. Несмотря на то, что он относительно новый для веб-мира, он все же может быть значительно быстрее, чем JavaScript.

Что касается скорости синтаксического анализа, WebAssembly уже значительно быстрее, чем JavaScript. Виртуальная машина WebAssembly от Firefox может запускать WebAssembly быстрее, чем он поступает из сети. Это устраняет значительную проблему скорости с JavaScript.

Используя WebAssembly, Figma сократила время загрузки в 3 раза. Что касается скорости выполнения, WebAssembly еще предстоит поработать, прежде чем он полностью раскроет свой потенциал, но первые результаты обнадеживают. В настоящее время WebAssembly иногда работает лучше, чем JavaScript, но иногда и хуже.

Еще одна проблема с производительностью WebAssembly — высокая нагрузка на вызов веб-API из WebAssembly. Mozilla оптимизировала это, но у Chrome и Node.js эта проблема все еще есть. Тем не менее, производительность WebAssembly улучшается, и в конечном итоге с помощью WebAssembly можно будет добиться собственной производительности.

Гибкость

WebAssembly разработан для многоязычной поддержки. Он имеет текстовый формат (WAT), но им сложно пользоваться.

В настоящее время вы можете скомпилировать многие языки в WebAssembly, такие как форма TypeScript, Go, Rust и C. Благодаря этому вы не ограничены JavaScript и вместо этого можете использовать другой язык по таким причинам, как экосистема, синтаксис или код. обмен между платформами.

Текущее состояние WebAssembly

До широкого внедрения WebAssembly еще далеко, но прогресс идет. Теперь мы рассмотрим состояние WebAssembly в веб-браузерах, на серверах и лучшие языки для использования.

Веб-поддержка

WebAssembly в Интернете находится на ранней стадии, хотя вы уже можете создавать полноценные веб-сайты, не касаясь JavaScript. Браузерная поддержка WebAssembly довольно хороша, ее поддерживают все современные браузеры.

Если вы пытаетесь создать законченное веб-приложение с помощью WebAssembly, самый простой способ сделать это на данный момент — использовать Rust и фреймворк, такой как Yew с Trunk. Однако из-за небольшой экосистемы WebAssembly в настоящее время лучше всего подходит для небольших частей приложения, ориентированных на производительность, а не для целых приложений.

Поддержка сервера

WebAssembly на сервере быстро растет. WebAssembly предлагает сверхлегкую изоляцию, что делает его идеальным для бессерверных функций, поскольку бессерверные функции должны запускаться быстро и занимать мало места. Для примера того, как это работает, давайте посмотрим, как работает один из самых популярных бессерверных сервисов функций Cloudflare Workers.

Cloudflare Workers выполняет бессерверные функции, используя изоляты V8, а не контейнеры в отдельных процессах. Изоляты V8 — это облегченные среды выполнения V8, которые запускаются значительно быстрее, чем традиционные изолированные среды.

Однако, поскольку изоляты предназначены только для ядра V8, поддерживаются только JavaScript и WebAssembly. Поскольку не все хотят использовать JavaScript, WebAssembly — популярный выбор для Cloudflare Workers. Фактически, Cloudflare Workers отлично поддерживает использование Rust с WebAssembly с официально поддерживаемым API Rust.

Как видите, WebAssembly — отличный выбор для серверов из-за того, что он может выполняться в легкой и безопасной среде. Если вы хотите посмотреть тесты, включая Cloudflare Workers, чтобы показать улучшение скорости изолятов, вот некоторые из них.

Языковая поддержка

В настоящее время, если вы хотите использовать WebAssembly, лучшими языками для использования являются Rust или AssemblyScript. Rust имеет самую обширную экосистему для WebAssembly с такими инструментами, как WASM-Bindgen для привязки к JavaScript, WASM-Pack для создания пакетов WASM и другими.

Однако, хотя у AssemblyScript значительно меньшая экосистема, он может быть хорошим выбором для небольших модулей WebAssembly. AssemblyScript — это TypeScript с более продвинутыми типами, поэтому его легко освоить, если у вас есть предыдущий опыт работы с JavaScript.

Кроме того, AssemblyScript часто может быть почти таким же быстрым, как Rust или C WebAssembly, при этом предоставляя значительно меньшие двоичные файлы.

Заключение

WebAssembly все еще новичок в мире Интернета. Тем не менее, он уже находит место в легковесном бессерверном исполнении функций. Я надеюсь, что вы узнали что-то из этого, и на этом первая статья в State of the Web завершена. Спасибо за прочтение!

Первоначально опубликовано на https://byteofdev.com 1 января 2022 г.

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.