Поиск по сайту:

Почему WebAssembly имеет значение?


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

WebAssembly (Wasm) — это низкоуровневый машинный код, который работает на виртуальной машине на основе стека. Это означает, что он гораздо ближе к вашему оборудованию, чем JavaScript. Это необходимо проанализировать и полностью интерпретировать, прежде чем он сможет работать.

Создание Wasm немного сложнее, чем написание JavaScript. Хотя вы можете вручную закодировать его в текстовом формате Wasm, это низкоуровневый код, эквивалентный написанию ассемблерного кода для собственного исполнения. Чаще вы будете писать на установленном языке программирования и компилировать в Wasm. (Подробнее об этом позже.)

Почему Wasm действительно имеет значение?

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

Wasm не заменяет JavaScript. Он нацелен на конкретные случаи использования, где JavaScript по-прежнему является помехой и, возможно, всегда будет таковой. Из этих случаев производительность — это то, где Wasm особенно выделяется.

Веб-сайты с большим количеством JavaScript имеют тенденцию чувствовать себя вялыми и потреблять память. Это особенно заметно на мобильных устройствах, где веб-приложениям по-прежнему не хватает «ощущения» от своих нативных аналогов.

Поскольку Wasm находится намного ближе к оборудованию, он предлагает уровень производительности, едва отличимый от нативных приложений. Это открывает Интернет для нового класса приложений, критически важных для производительности. Если он работает на вашем рабочем столе, он может работать в браузере без заметного снижения производительности.

Нужно ли нам больше веб-производительности?

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

Публикация вашего приложения в Интернете дает вам максимально широкую аудиторию. Любой может получить к нему доступ с любого устройства, которым он владеет. Это повышает удобство для ваших пользователей и означает, что вам нужно поддерживать одну кодовую базу.

Настоящий вопрос заключается не в том, нужно ли нам больше веб-производительности: вместо этого мы должны задаться вопросом, нужно ли нам больше приложений в Интернете. Чтобы ответить на этот вопрос, мы можем обратиться к сайтам с большим количеством функций, которые уже используют Wasm.

AutoCAD — это программа автоматизированного проектирования для архитекторов и инженеров. Последняя веб-версия дебютировала на Google I/O в 2018 году. Она использует Wasm для использования компонентов существующей базы кода для настольных компьютеров как есть. Часть кода существует 35 лет назад, но теперь работает в браузере.

Другой пример — Figma, которая уже использовала подмножество JavaScript asm.js для оптимизации своей производительности. Перейдя на Wasm, Figma отметила улучшение производительности в 3 раза. Google также использует Wasm, полагаясь на него, чтобы вывести Google Планета Земля в Интернет для всех.

Эти очень сложные приложения ранее не могли существовать в Интернете. В противном случае они работали с серьезными потерями производительности по сравнению со своими настольными аналогами. Wasm — это архитектура, необходимая для завершения перехода сети от страниц, ориентированных на документы, к полноценной платформе приложений. Вы даже можете играть в Doom 3!

Расширение выбора разработчиков

Помимо производительности, WebAssembly имеет большое значение, поскольку дает разработчикам больше гибкости и выбора. За исключением устаревших плагинов Flash, Java и ActiveX, JavaScript был вашим единственным выбором при написании кода для браузера.

Теперь эта ситуация изменилась. WebAssembly — это низкоуровневый формат, в который компилируются другие языки. C, C++, C#, Java, Python, Rust и многие другие способны выводить модули WebAssembly. Это дает разработчикам гораздо больше возможностей при создании кода для Интернета.

Вам все еще нужен JavaScript для загрузки ваших модулей Wasm, но это все. Вы можете реализовать все функциональные возможности вашего проекта, используя выбранный вами язык, а затем скомпилировать его в Wasm для браузера.

Теперь разработчики могут писать для Интернета на том языке, который лучше всего подходит им и их приложениям. Это может быть строго типизированный объектно-ориентированный язык или что-то, ориентированное на функциональное программирование. Вы больше не ограничены свободной типизацией JavaScript и прототипами объектов.

Содействие повторному использованию кода

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

Используя C# в качестве примера, у вас может быть .NET DLL, которая содержит удобные методы, используемые вашим кодом на стороне сервера и вашим настольным приложением. Раньше вам нужно было реализовать эти методы в JavaScript, когда пришло время создавать веб-приложение.

С Wasm вы можете перекомпилировать свою DLL, используя WebAssembly в качестве цели. тот же код становится доступным в браузере. Wasm сокращает потери и дублирование проектирования, позволяя вам использовать то, что у вас уже есть.

Исторически это было возможно только в том случае, если ваш сервер использовал Node.js. Вы можете абстрагировать общую логику в библиотеку JavaScript, готовую для повторного использования во внешнем интерфейсе. Теперь вы можете работать с библиотеками, написанными на любом языке.

Это работает, даже если вы будете использовать JavaScript для большей части своего веб-приложения. Вы можете взаимодействовать с модулями Wasm через JavaScript, поэтому вы все еще можете использовать свою DLL общих функций. Асинхронные API позволяют вам обмениваться данными с Wasm, чтобы вы могли вызывать функции и получать их возвращаемые значения.

Краткое содержание

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

Важно также смотреть за пределы заголовков преимуществ. Wasm — это не только увеличение скорости. Это также может сократить время доставки для групп разработчиков, особенно тех, которые работают на разных платформах или совместно используют логику между клиентом и сервером. Часть ажиотажа вокруг WebAssembly проистекает из превращения Интернета в цель компиляции, а не в полностью автономную платформу. Создание для браузера больше не означает написание JavaScript.

Здесь, в 2021 году, внедрение WebAssembly остается относительно низким. Проекты, в которых он используется, сообщают об успехах — вам нужно только попробовать Figma или Google Earth, чтобы оценить стандарт производительности Wasm. Вы, вероятно, увидите больше Wasm в течение следующих нескольких лет, поскольку приложения, как новые, так и старые, будут перенесены в браузер.