Что заменит JavaScript?

внешний интерфейс JavaScript Программа перевода самородков

Что заменит JavaScript?

JavaScript находится на подъеме. Но благодаря WebAssembly его упадок может быть лишь вопросом времени.

隧道的尽头 / [[Pixabay](https://pixabay.com/?utm_source=link-attribution&utm_medium=referral&utm_campaign=image&utm_content=20180)]

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

Десять лет назад JavaScript не показывал никаких признаков завоевания мира. Мы по-прежнему используем другие платформы, такие как Java, Flash и Silverlight. Все три платформы должны работать в подключаемом модуле браузера, и все три заменяют HTML другим пользовательским интерфейсом. Такой подход значительно опережает JavaScript с точки зрения возможностей — например, уже в\<video>Элементы, анимацию CSS или холст HTML, прежде чем мы сможем использовать их для добавления видео, анимации и рисования. Но это также означает их упадок. Когда взорвался мобильный браузер и HTML переместился на мобильные браузеры, эти платформы также устарели.

По иронии судьбы, как только JavaScript завоевал мир, было посеяно крошечное семя. В какой-то момент в будущем он объявит о конце JavaScript. Это семя — экспериментальная технология под названием asm.js.

Но прежде чем представить его, давайте сделаем шаг назад и рассмотрим текущую ситуацию.

Транскодирование: текущая практика

Поскольку у нас есть JavaScript, разработчики стараются его избегать. Ранний подход заключался в использовании плагинов для извлечения кода из браузера. (Этот метод не работает.) Другая идея состоит в том, чтобы разработать средства разработки, которые могут преобразовывать код, написанный на другом, более популярном языке.конвертироватьв JavaScript. Таким образом, разработчики могут заставить свой код работать везде, где они хотят, не пачкая рук.

Процесс преобразования одного языка в другой называетсятранскодирование, но процесс не был гладким. Языки высокого уровня имеют другие функции, синтаксис и идиомы, которые вы не можете просто напрямую сопоставить с другой эквивалентной конструкцией. Даже если бы вы могли, это потенциально опасно. Что, если сообщество перестанет разрабатывать ваш любимый транскодер? Или что, если транскодер добавит свою ошибку? Что, если вы хотите подключить фреймворк JavaScript, такой как Angular, React или Vue? Если вы не разрабатываете на том же языке, что и ваша команда, как вы собираетесь работать с командой?

Как и во многих случаях разработки, инструмент хорош ровно настолько, насколько хорошо сообщество, стоящее за ним.

В наши дни транскодеры слишком распространены, но они часто используются только для одной цели — обеспечения обратной совместимости.

Разработчики пытаются использовать последнюю возможную версию JavaScript, а затем используют что-то вродеBabelнапример, транскодеры преобразуют свой код в эквивалентный (но менее элегантный) старый код JavaScript, чтобы этот код был совместим со всеми средами выполнения. Или, что еще лучше, они используют TypeScript (современный JavaScript, который добавляет такие функции, как строгая типизация, дженерики и ненулевые типы) иTypeScriptПреобразовать в JavaScript. В любом случае, вы ходите по маленькому саду JavaScript.

Asm.js: ступенька

Рассвет новых возможностей наступил в 2013 году с уникальным экспериментом разработчиков Mozilla — asm.js. Они искали способ запуска высокопроизводительного кода в браузере. Но в отличие от плагинов, asm.js не пытается быть удобным для браузера. Вместо этого он направлен нанепосредственныйВиртуальная машина JavaScript.

По сути, asm.js — это краткий оптимизированный синтаксис JavaScript. Он работает быстрее, чем обычный JavaScript, потому что избегает медленных динамических частей языка. Однако веб-браузеры, которые знают об этом, также могут применять другие методы оптимизации, которые могут значительно повысить производительность. Другими словами, asm.js следует золотому правилу:не разрушайweb, а также предоставляет методы для будущих улучшений. Команда Firefox использует asm.js и программное обеспечение под названиемEmscripten, который помещает 3D-игры в реальном времени, созданные на C++, в веб-браузеры, и для игры требуется только JavaScript и сердце.

运行在 asm.js 上的虚幻引擎

Самая важная часть asm.js заключается в том, что он заставляет разработчиков переосмыслить то, что делает JavaScript. Asm.js-коддаКод JavaScript, но это не означает, что программисты должны писать код asm.js и манипулировать им вручную. Вместо этого код asm.js должен создаваться автоматизированным процессом (транскодером) и передаваться непосредственно в браузер. JavaScript — это посредник, а не окончательное сообщение.

WebAssembly: новая технология

Хотя эксперимент ASM.js произвел некоторую ослепующую демонстрацию, но в основном это работа разработчиков игнорируется. Для них это просто еще одна интересная новая технологий. Но с рождением Webassembly все это изменилось.

WebAssembly одновременно является преемником asm.js и совершенно другой технологией. Это компактный формат двоичного кода. Как и asm.js, код WebAssembly также вводится в среду выполнения JavaScript. Они оба имеют одну и ту же песочницу и одну и ту же среду выполнения. Как и asm.js, способ компиляции WebAssembly обеспечивает дальнейшее повышение эффективности. Но текущая эффективность уженамного быстрее, чем раньшеТеперь браузеры могут полностью пропустить фазу разбора JavaScript. Для обычной части логики (например, длительных вычислений) WebAssembly намного быстрее, чем обычный JavaScript, и почти так же быстро, как код, скомпилированный в собственном коде.

简化版的 WebAssembly 处理过程管道

Если вам интересно, как выглядит WASM, представьте, что у вас есть такая функция C:

int factorial(int n) {
  if (n == 0)
    return 1;
  else
    return n * factorial(n-1);
}

Он будет скомпилирован в код WASM следующим образом:

get_local 0
i64.eqz
if (result i64)
    i64.const 1
else
    get_local 0
    get_local 0
    i64.const 1
    i64.sub
    call 0
    i64.mul
end

При отправке по сети код WASM дополнительно сжимается в двоичный код.

WebAssembly позиционируется как компилятор. Ты никогда не пишешь это от руки. (Однако, если вы хотитеУглубленное исследование, конечно тысможет сделать. )

WebAssembly впервые появился в 2015 году. Сегодня он полностью поддерживается четырьмя основными браузерами для компьютеров и мобильных устройств (Chrome, Edge, Safari и Firefox). Он не поддерживается в Internet Explorer, хотя преобразование кода WebAssembly в asm.js обеспечивает обратную совместимость. (Это повлияет на производительность, пожалуйста, дайте IEпропадатьБар! )

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

По умолчанию WebAssembly предоставляет разработчикам возможность писать оптимизированные подпрограммы кода, как правило, на C++. Это мощная функция, но ее использование ограничено. Это полезно, если вам нужно повысить производительность сложных вычислений. (Например, fastq.bio использует WebAssemblyускоритьрассчитали их последовательность ДНК. ) если нужно портировать высокопроизводительные игры или писать для запуска в браузереэмулятор, то вы заслуживаете WebAssembly. Если это и есть суть WebAssembly, то он скучен — и у него нет никакой надежды заменить JavaScript. WebAssembly также предоставляет другим разработчикам фреймворков возможность минимизировать свою платформу до среды JavaScript.

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

Это звучит как ограничение принципа, который нужно нарушить. Однако умные разработчики нашли способы обойти среды выполнения в WebAssembly. Например, MicrosoftBlazorFramework загрузите небольшую среду выполнения .NET в виде скомпилированного файла WASM. Эта среда выполнения обрабатывает взаимодействие JavaScript и предоставляет базовые службы (такие как сборка мусора) и более продвинутые функции (макет, маршрутизация и виджеты пользовательского интерфейса). Другими словами, Blazor использует виртуальную машину, которая существует внутри другой виртуальной машины. Это можно охарактеризовать как загадочный парадокс и как умный способ создания фреймворков для не-JavaScript-приложений, которые запускаются в браузере.

Blazor — не единственный эксперимент, основанный на WebAssembly. кPyodideНапример, его цель — поместить Python в браузер и предоставить высокоуровневый математический инструментарий для анализа данных.

Этотэто будущее. WebAssembly начинался только для удовлетворения потребностей C++, Rust, но был быстро использован для создания более амбициозных экспериментов. Вскоре эти не-JavaScript-фреймворки будут конкурировать со стандартными фреймворками на основе JavaScript, такими как Angular, React и Vue.

И WebAssembly по-прежнему быстро развивается. Его текущая реализация представляет собойМинимальный жизнеспособный продукт- Может работать только в некоторых важных сценариях, а не в общем методе, разработанном в Интернете. Это явление улучшится по мере того, как WebAssembly станет более популярным. Например, если такая платформа, как Blazor, завоюет популярность, WebAssembly может поддерживать прямой доступ к DOM. Теперь производители браузеров планируют добавить механизмы сборки мусора и многопоточности, а с WebAssembly им не нужно самим реализовывать эти детали среды выполнения.

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

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

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


Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,товар,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.