Ну-ну, читатель, тебя тоже зацепило слово WebAssembly? Что это такое и почему оно так популярно?

Прежде чем мы перейдем к техническим деталям, давайте рассмотрим некоторую справочную информацию. Эта статья представляет собой сборник моих заметок по результатам моих исследований WebAssembly, WASI и WasmEdge. В нем делается попытка осветить детали этой темы с точки зрения новичка, а в некоторых местах рассматриваются концепции, которые могут показаться тривиальными, если вы их уже знаете (не стесняйтесь пропускать эти части). Вот и все; мы готовы к работе!

Во-первых, давайте правильно разберемся с основами.

Как работает веб-браузер?

Это длинная статья сама по себе, но мы рассмотрим только те фрагменты, которые имеют отношение к интересующей нас теме. Мы используем веб-браузер для доступа к информации из любого места в Интернете. Протокол HTTP используется для передачи данных между клиентом (например, веб-браузером) и веб-сервером. Теперь веб-браузер получает эти данные в формате HTML (язык гипертекстовой разметки) и использует механизм рендеринга для преобразования их в текст, изображения, видео и все, что мы видим на экране. Интернет. Но есть загвоздка с движком рендеринга. Он понимает только несколько языков (как обсуждается ниже).

Как выглядит веб-платформа и что она может понимать?

"Веб-платформа – это набор технологий – компьютерных языков и API – созданных для публикации веб-страниц".

Как правило, веб-платформа делится на две части: виртуальная машина, которая понимает только HTML, CSS и Javascript, и набор веб-API. которые обрабатывают функциональность (DOM, CSSOM, IndexedDB и т. д.). Если вы работали в сфере веб-разработки или слышали, как об этом говорят случайные люди, вы быстро обнаружите, что все дело в этих трех языках и веб-API.

Появление четвертого языка — WebAssembly

«WebAssembly — это новый тип кода, который можно запускать в современных веб-браузерах. Это низкоуровневый язык, похожий на ассемблер, с компактным двоичным форматом, который работает почти с исходной производительностью и поддерживает такие языки, как C/C++. , C# и Rust с целью компиляции, чтобы их можно было запускать в Интернете».

Копыто! Это слишком много, чтобы принять сразу. Давайте делать маленькие шаги в этом.

Что такое веб-сборка?

⭐ Прежде всего это низкоуровневый язык, похожий на ассемблер с бинарным форматом. Для кого-то было бы более чем утомительно кодировать, используя только 0 и 1, и вам не нужно этого делать. Отсюда решения:

  • Вы можете либо использовать текстовый формат WebAssembly(файлы .wat) и преобразовать их в файлы .wasm с помощью wat2wasm, либо
  • Используйте wasm в качестве цели компиляции для программ, написанных на предпочитаемом вами языке, и, тада, у вас есть файл двоичного формата.

Первый способ довольно прост, однако важно отметить, что текстовый формат WebAssembly делает его читабельным и легко отлаживаемым👁️‍🗨️ людьми. С точки зрения второго метода, что означает для WebAssembly цель компиляции для исходных языков, таких как C, C++, Rust и т. д.? Теперь вы можете писать код почти на любом языке, компилировать его в .wasm и запускать в браузере(💡 представляет ли это угрозу давнему доминированию Javascript? минута).

⭐ Во-вторых, wasm эффективен и быстр⚡, почти на одном уровне с производительностью нативного кода (хотя анализ производительности веб-сборки по сравнению с нативным кодом все еще остается предметом обсуждения) . Вы можете узнать больше о производительности Wasm, прочитав этот исследовательский документ: https://www.arxiv-vanity.com/papers/1901.09056/

⭐ Третьим важным аспектом WebAssembly является безопасность🔐. Поскольку код веб-сборки выполняется в изолированной среде, управляемой виртуальной машиной, он не может напрямую взаимодействовать с операционной системой хоста. Доступ к системным ресурсам, таким как файлы, оборудование или интернет-соединения, возможен только через системный интерфейс WebAssembly (WASI) виртуальной машины. Хотя Wasm предлагает многообещающие характеристики безопасности, в нем все еще есть лазейки, которые выявляются по мере расширения вариантов использования, поэтому это отличная область для исследователей, на которой можно сосредоточиться. Дальнейшее чтение о дизайне WebAssembly может помочь вам понять, как Web Assembly реализует функции безопасности.

Javascript против WebAssembly?

WebAssembly определенно звучит многообещающе и выгодно. Означает ли это, что в конечном итоге он заменит Javascript?

Нет WebAssembly предназначен дополнятьJavaScript, а не заменять его. Для загрузки модулей WebAssembly требуется некоторый код JavaScript. Цель WebAssembly — работать рука об руку с JavaScript, позволяя веб-разработчикам использовать сильные стороны обоих языков. Это означает, что платформы JavaScript могут извлечь выгоду из WebAssembly, обеспечивая значительное повышение производительности и новые функции. , в то же время делая функциональные возможности легко доступными для веб-разработчиков.

Веб-сборка – мощный толчок для развития Javascript.

Почему WebAssembly? Изучение вариантов использования —

Теперь, когда мы рассмотрели все основные преимущества WebAssembly, мы должны понять, почему мы это делаем. Мы слышали о том, насколько невероятна эта технология, но только небольшой процент технических титанов использует ее прямо сейчас. Есть ли реальные приложения для WebAssembly?

🚀 Представьте себе, все настольные приложения, игры со сложными системными требованиями, видеоредакторы, приложения AR-VR и приложения с большим объемом данных теперь могут работать в браузере! Что ж, это одна из многих вещей, которыми может похвастаться WebAssembly. Wasm может покорить все области, требовательные к производительности , в которых javascript оставил пустоту, включая, помимо прочего, запись и кодирование аудио, кодирование видео, визуализацию 3D-объектов в реальном времени, Редактирование и аннотирование PDF-файлов, визуализация данных в реальном времени, выполнение физического моделирования в реальном времени и многие другие варианты использования. Узнайте больше о таких вариантах использования здесь.

🚀 Для всех поклонников C, C++, Rust и других родных языков, которые немного разочарованы тем, что Javascript является единственным языком, который может работать в браузере, WebAssembly здесь, чтобы стать вашим спасителем! Теперь программисты могутиспользовать все преимущества кодов, написанных почти на 40 других языках для использования в браузере, чтобы обеспечить лучший пользовательский опыт, чем только Javascript. Ознакомьтесь со списком языков, которые поддерживают WebAssembly в качестве цели компиляции.

🚀 Кроме того, WebAssembly поддерживает сжатие на стороне клиента, что приводит к более быстрому времени загрузки и меньшему использованию полосы пропускания. Это влечет за собой использование ЦП или оборудования клиента для выполнения действий по сжатию и распаковке до использования ресурсов сервера.

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

Не конец…

Если вы зашли так далеко, я уверен, что WebAssembly пробудил ваш интерес, и вы хотите попробовать его. В следующей статье мы попытаемся написать код на Rust (предпочтительный язык для WebAssembly), склеить его с несколькими строками HTML и JS и запустить в веб-браузере. После этого мы попытаемся выполнить его без веб-браузера, используя среду выполнения — WasmEdge — и углубимся в эту инновационную технологию.

А пока продолжайте исследовать и учиться!

Библиография:

Я просмотрел довольно много статей и документов в недавнем прошлом, чтобы понять эти технологии. Вот несколько ресурсов, на которые я часто ссылался при курировании этого документа. Не стесняйтесь читать их, чтобы получить подробное представление о темах.

https://webassembly.org/

https://developer.mozilla.org/en-US/docs/WebAssembly

https://training.linuxfoundation.org/blog/webassembly-security-now-and-in-the-the-future/

https://wasmedge.org/book/ru/