«Убьет ли WebAssembly JavaScript?»

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

В официальном FAQ на webassembly.org этот вопрос решается напрямую, с ответом WebAssembly разработан как дополнение, а не замена JavaScript. Такие эксперты, как Брендон Эйх, бывший генеральный директор Mozilla, предсказали будущее, в котором WebAssembly и JavaScript будут развиваться совместно.

Будущее веб-разработки

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

Благодаря WebAssembly будущее веб-разработки:

  1. Лингвистически разнообразный
  2. Очень быстро
  3. Параллельный

WebAssembly обеспечивает языковое разнообразие

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

Уже существует внушительный список реализаций с поддержкой компиляции в WASM на более чем 20 различных языках, включая следующие основные:

Эта диверсификация языков сделает возможным распространение веб-фреймворков для разработчиков этих языков, что позволит им разрабатывать приложения непосредственно на выбранных ими языках. Некоторыми ранними примерами являются Yew для Rust и Humble в Go (в настоящее время Humble нацелен на GopherJS как компилируемый в javascript, но я ожидаю, что скоро он будет поддерживать бэкэнд WASM)

WebAssembly позволяет работать с очень быстрыми веб-приложениями

WASM позволит значительно повысить производительность. Мы видели, как Firefox продемонстрировал, что в отличие от JavaScript, WASM может быть скомпилирован и запущен так же быстро, как и по сети.

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

Для больших документов это означало переход от более 10 секунд к интерактивному браузеру до менее чем 5. Это огромное улучшение.

Улучшения производительности во время выполнения были менее значительными, но все же очевидны. Тесты интенсивных графических операций при сравнении WASM с D3 показали 30% улучшений в крупных проектах.

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

Уже есть свидетельства того, что фреймворки исследуют это, например, Ember.js исследует реализацию WASM для своей виртуальной машины Glimmer.

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

WebAssembly включит параллелизм

По общему признанию, этот вариант является немного более умозрительным, поскольку он не полностью реализован в сегодняшней WebAssembly.

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

В недавней основной презентации будущего браузера Лин Кларк из Mozilla подчеркнул, что единственная часть веб-опыта, которую браузеры не могут невидимо распараллелить, - это реальный код приложения. JavaScript был разработан как однопоточный язык, и хотя более новые инструменты, такие как Web Workers, позволяют в некоторой степени использовать параллелизм в JavaScript, их все еще сложно использовать, и они работают только на относительно детализированном уровне.

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

Большая часть этого снова будет происходить на уровне фреймворков и библиотек. Я не представляю, как ваш средний разработчик приложений использует потоки WebAssembly в своем приложении, но только на стороне фреймворка есть огромный потенциал. Новая Fiber Architecture React уже рассматривает возможность разбиения закулисной работы по рендерингу на фрагменты, которые можно передавать и задерживать.

Представьте себе Fiber на основе WebAssembly, который распределяет работу по рендерингу между всеми доступными ядрами, а затем просто передает ее приложению JavaScript по мере необходимости.

Будущее веб-разработки светлое

Не знаю, как вы, но меня очень радуют возможности, предоставляемые WebAssembly, даже если я никогда не касаюсь этого напрямую и продолжаю писать код на JavaScript. По мере того, как инструменты продолжают развиваться, все больше браузеров используют возможности производительности, продемонстрированные Mozilla, а фреймворки и библиотеки все чаще используют эти возможности, будущее веб-разработки очень светлое!

P.S. - Если вас интересуют такие темы, вы можете подписаться на меня в Twitter или подписаться на мою рассылку новостей. Я отправляю еженедельный информационный бюллетень под названием Friday Frontend. Каждую пятницу я рассылаю 15 ссылок на лучшие статьи, учебные пособия и объявления по CSS / SCSS, JavaScript, а также множество других замечательных новостей Front-end. Зарегистрируйтесь здесь: https://zendev.com/friday-frontend.html

Первоначально опубликовано на zendev.com 26 июня 2018 г.

✉️ Подпишитесь на рассылку еженедельно Email Blast от CodeBurst 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ Дорожная карта веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .