Transcription
Вы видели этот заголовок сотню раз к настоящему моменту. WebAssembly наконец-то заменяет JavaScript. Так неужели язык, на котором работает весь веб, собирается умереть? Честный ответ сразу? Нет. А также, в некотором роде, да. JavaScript более укоренился, чем когда-либо прежде. Но в 2025 году что-то под ним действительно треснуло, потому что заменялась не та вещь, которую вы набираете. Это монополия, 30-летнее правило, что браузер говорит ровно на одном языке и ни на каком другом. WebAssembly нарушает это правило. Пишите на C++, Rust, Go или C# — и это работает внутри браузера с почти нативной скоростью. Не переведено на JavaScript, а фактически выполнено. И это не лабораторная демонстрация. Откройте Figma прямо сейчас. Этот невероятно плавный холст — это C++, скомпилированный в WebAssembly, и он сделал загрузку их приложения более чем в три раза быстрее. Photoshop работает во вкладке браузера сегодня. Как и Google Earth. Программное обеспечение полного настольного класса, поставляемое как WebAssembly, без необходимости установки. Так почему же это стало реальностью именно в 2025 году? Потому что стандарт наконец-то вырос. Вышла WebAssembly 3.0. Его главная особенность имеет самое скучное название во всей вычислительной технике — сборка мусора. Оставайтесь со мной. Эта одна тусклая фраза — весь сюжет. И она отказалась оставаться внутри браузера. WebAssembly вышла на сервер и начала пожирать контейнеры. Хотите сказать, что реальные деньги движутся? Несколько недель назад гигант глобальной CDN полностью купил компанию, занимающуюся бессерверным WebAssembly. Два фронта, одно изменение: браузер и сервер. Позвольте мне провести вас через то, что именно сломалось и что именно заменило это. Во-первых, некоторая справедливость, потому что я искренне люблю JavaScript. Он выиграл веб по реальным причинам. Он везде по умолчанию. Он поставляется в каждом браузере на Земле с нулевой настройкой, и вы можете построить с его помощью почти все. Никто здравомыслящий на самом деле не хочет, чтобы он исчез. Но JavaScript платит за эту дружелюбность скоростью. Он динамически типизирован, собирает мусор и в основном выясняет все во время выполнения. Для формы или панели управления вы никогда не почувствуете затрат. Для видеоредактора, игры или 3D-движка вы врезаетесь лицом в стену. Разработчики сталкиваются с этой стеной рано. Еще в 2017 году Figma уже написала свой редактор на C++ и скомпилировала его в странный, урезанный кусок JavaScript под названием asm.js, по сути, обманывая движок, чтобы он работал быстро. Это работало, но это был хак. Этот хак работал достаточно хорошо, чтобы разработчики браузеров сделали его официальным. В 2017 году все четыре основных браузера выпустили WebAssembly, настоящий компактный байт-код, который работает почти со скоростью нативного машинного кода. Впервые у браузера появился серьезный второй язык, но первая версия имела жесткое ограничение. Модуль WASM мог работать ровно с одной вещью: одним плоским блоком памяти и сырыми числами. Это идеально подходит для C++ и Rust, которые уже управляют своей собственной памятью вручную до байта. Однако для почти всех других языков это было мучительно. Java, C#, Kotlin, Go. Все они полагаются на сборщик мусора, который очищает память за вас. Чтобы запустить их в WASM, вам пришлось скомпилировать целый сборщик мусора в сам модуль, мегабайты мертвого веса, прежде чем ваш код сделал хоть что-то полезное. И вы можете спросить, почему бы просто не позволить браузеру напрямую запускать нативный код и пропустить все это? Потому что нативный код может читать все на вашей машине. WebAssembly работает в заблокированной песочнице, которая может делать только то, что вы разрешаете. Безопасность всегда была главной целью. Это именно та стена, которую 2025 год снес. WebAssembly 3.0 — это действительно огромный релиз. 64-битная память, несколько областей памяти, нативные исключения, хвостовые вызовы, более быстрая векторная математика, но одна функция возвышается над всеми остальными. Сборка мусора, встроенная непосредственно в сам WebAssembly. Теперь модуль может просто позаимствовать собственный сборщик браузера вместо того, чтобы тащить свой собственный. Эта проблема с мегабайтами накладных расходов, которую я только что описал, исчезла, практически в одночасье. И языки хлынули. За один год Java, Kotlin, Dart, Scala, даже OCaml выпустили настоящие бэкенды WebAssembly. Каждый из них использовал этот новый встроенный сборщик. Языки, которые никогда не могли реально коснуться браузера, внезапно смогли, и эффективно. Обновление до 64-бит имеет такое же значение. Старый WAS был ограничен 4 ГБ памяти, чего было достаточно, чтобы "подавиться" большим файлом Figma или огромным набором данных. Новый потолок внутри браузера — 16 ГБ, а на сервере — фактически неограничен. Вы почти наверняка использовали это, даже не заметив. Целые игровые движки, Unity, Unreal, теперь экспортируются напрямую в WebAssembly, а тяжелые инструменты, такие как CAD-программы, работают во вкладке. Все, что раньше требовало загрузки, теперь может быть просто ссылкой, которую вы нажимаете. Так кто же на самом деле выигрывает в вебе прямо сейчас? Честно говоря, Microsoft. Их фреймворк Blazor позволяет создавать полные фронтенды на C# без JavaScript, и он уже составляет примерно 42% всего WebAssembly, которое существует в живом вебе сегодня. Остальное — честная борьба, которая еще только набирает обороты. C++ через Emscripten занимает около 10%. Rust — едва 1,5%. Go — это округленная ошибка. Это ранние дни, без сомнения, но каждая из этих дверей теперь широко открыта, и написание кода не является чем-то экзотическим. Вы берете совершенно обычную функцию Rust, добавляете одну небольшую аннотацию, которая указывает компилятору нацелиться на WAS, и собираете. Получается крошечный модуль, который любая веб-страница может вызвать так, как если бы он просто был там все время. Теперь вот та часть, которую большинство людей полностью упускают. Браузер никогда не был конечной целью для WebAssembly. Это была тренировочная площадка. Настоящий приз находится на сервере. Ключом, который его открыл, является WASI, WebAssembly System Interface. Он предоставляет модулю WAS безопасный, изолированный способ доступа к файлам, сети и часам. Все то, что нужно настоящей программе, без браузера вокруг нее. Затем 2025 год стабилизировал главное — WASI 0.2 и компонентную модель. Fastly идеально описывает это. Программное обеспечение, которое вы строите, как кубики Lego. Компонент Go, который напрямую вставляется в компонент Rust без грязного клея между ними. И это поставило WebAssembly на прямой курс столкновения с контейнером. Docker-контейнер тащит за собой целую операционную систему и запускается за сотни миллисекунд. Модуль Wasm — это просто ваш код, запечатанный в крошечной песочнице. Насколько легче мы говорим? Функция Wasm может запуститься менее чем за миллисекунду, одна тысячная доля секунды, используя малую долю памяти, которую требует контейнер. Для бессерверных вычислений это не улучшение. Это совершенно другая категория. И это безопасно по умолчанию, что является тихой суперсилой здесь. Модуль Wasm может абсолютно ничего не делать, не касаться файлов, не открывать сокеты, если вы явно не предоставите ему это разрешение. Это именно то, что вам нужно, когда вы запускаете код незнакомца на периферии. Даже сам Docker предвидел это. Docker добавил первоклассную поддержку для запуска контейнеров WebAssembly. И Kubernetes теперь может планировать рабочие нагрузки Wasm прямо рядом с вашими обычными. Инструменты, которые определяли последнее десятилетие, тихо освобождают для него место, поэтому вся периферия полностью перешла на него. Cloudflare Workers, Fastly Compute, Fermyon — все они запускают WebAssembly в продакшене, распределенном по сотням дата-центров, выполняющемся прямо рядом с вашими пользователями, а не за океаном. А затем деньги заговорили громко. В декабре 2025 года Akamai, один из крупнейших CDN на планете, полностью купил Fermyon, компанию, разрабатывающую бессерверный WebAssembly. И такие компании, как Shopify, уже меняют контейнеры на Wasm на своих самых горячих, самых критичных к производительности путях. Хорошо, теперь позвольте мне вылить немного холодной воды, потому что этот заголовок действительно немного несправедлив. Сырые цифры принятия скромны. WebAssembly появляется только примерно на 0,35% всех веб-сайтов, и эта цифра была практически неизменной в течение двух лет подряд. Но средние значения вас обманывают. Посмотрите, где он на самом деле находится. На 1000 лучших сайтах, тех, у которых реальный трафик и реальные бюджеты на производительность, принятие увеличивается примерно до 2%. Он выигрывает именно там, где работа самая сложная, а ставки самые высокие. И я не буду преувеличивать. WebAssembly по-прежнему не может напрямую касаться страницы. Ему приходится обращаться через JavaScript, чтобы изменить один пиксель. История отладки более грубая, а инструменты моложе. Это ставка на траекторию, а не на готовый продукт, который вы развертываете вслепую. Потому что JavaScript по-прежнему запускает каждое из этих WASM-приложений. Он по-прежнему владеет DOM. Каждая кнопка, каждый клик, каждый пиксель страницы проходит через него. Вы буквально не можете запустить WebAssembly без него. JavaScript — это хост, и он никуда не денется. Так что же здесь действительно умирает? Не язык, а убеждение. Старое предположение, что веб работает только на JavaScript, что серьезное программное обеспечение не может жить во вкладке, и что каждой крошечной серверной функции нужна целая операционная система, прикрепленная под ней. Форма, которая заменяет это, гораздо проще, чем ажиотаж. JavaScript — это клей и дружелюбное лицо приложения. WebAssembly — это машинное отделение, где тихо происходит тяжелая работа. Теперь они партнеры, а не соперники, борющиеся за один трон. Так стоит ли вам действительно беспокоиться? Если вы весь день создаете CRUD-приложения и вызываете API, честно говоря, пока нет, и это совершенно нормально. Но если вы пишете горячие циклы, инструменты, периферийные функции, части, где сырая скорость является продуктом, земля под вами действительно смещается. Вот мой реальный совет. Не переписывайте ничего. Просто узнайте, что компилируется в WebAssembly, немного Rust, немного Go, немного C#, и держите один глаз на этой компонентной модели. Именно туда сейчас тихо вливается следующее десятилетие веба. JavaScript построил веб, и он заслужил каждый бит этого. Просто он больше не будет запускать все это полностью самостоятельно. Если это переосмыслило, как вы видите свой собственный стек, подпишитесь. Здесь мы разбираем ажиотаж и показываем вам чеки под ним.