В мире разработки программного обеспечения технологии быстро развиваются. Команды разрабатывают различные замечательные инструменты, которые помогут разработчикам в разработке высокопроизводительных приложений, предоставляющих пользователям хороший опыт. Когда мы говорим о создании приложения, будь то мобильное или веб-приложение, первое и главное требование, которое приходит нам на ум, — это его «Производительность». Это один из наиболее важных аспектов разработки программного обеспечения, поскольку он влияет на взаимодействие с пользователем, а с точки зрения отзывов пользователей он может стать основной причиной того, что приложение стало печально известным только из-за его задержки при выполнении определенных задач. Вторым важным фактором при создании приложения является его Безопасность. Отзывы пользователей с точки зрения безопасности имеют такое же значение, как и производительности.

Поскольку мы все знаем, что браузер понимает только JavaScript. Независимо от того, какую структуру или библиотеку мы используем, в конечном итоге они сначала преобразуются в JavaScript. Чтобы браузер мог понять это и затем выполнить соответствующим образом. Таким образом, мы можем сказать, что в веб-приложениях вся производительность приложения в основном зависит от JavaScript. Это проблема?

Абсолютный ответ – НЕТ. Но в некоторых случаях ответ может быть утвердительным. Причиной этого факта является динамическое поведение JavaScript. Чтобы лучше понять динамическое поведение, сначала давайте поймем, как JavaScript работает «за кулисами» движка браузера.

Что делает JavaScript медленным?

Каждый браузер имеет свой собственный движок JavaScript, например. Chrome использует движок V8, Mozilla Firefox использует движок рендеринга Gecko и т. д., который представляет собой просто программу, выполняющую код JavaScript. Каждый JS-движок состоит из двух компонентов.

  1. Стек вызовов (где выполняется наш код)
  2. HEAP (неструктурированный пул памяти, в котором хранятся наши объекты)

Если есть задача, посвященная процессору, или задачи, ориентированные на аппаратное обеспечение, такие как кодирование JSON или декодирование каких-либо криптографических вещей, то выполнение таких задач JavaScript может занять много времени. Причина в его динамическом характере, как объяснено выше. Поскольку сначала код анализируется движком, а затем он преобразуется в код AST (абстрактное синтаксическое дерево), затем он отправляется в стек вызовов, где этот код выполняется (машинный код). Чтобы сэкономить время, сначала отправляется неоптимизированная версия (байт-код), а затем она несколько раз повторно отправляется обратно в компилятор TurboFan для получения оптимизированной версии, но код не останавливается. Это делает JavaScript медленным для задач, ориентированных на процессор или оборудование.

Для выполнения таких задач, посвященных ЦП, мы используем для операций языки низкого уровня, такие как C/C++, Rust и т. д. Поскольку эти языки предлагают ручное управление памятью и обеспечивают больший контроль над системным оборудованием. Эти языки преобразуются в машинный код, который высоко оптимизирован и запускается непосредственно на оборудовании. Но проблема с этими низкими языками заключается в том, что, как упоминалось ранее, браузеры не допускают произвольного кода без какой-либо песочницы и понимают только JavaScript, который находится в режиме песочницы. Итак, как мы можем запустить программу в браузере, написанную на кроссплатформенной основе?

Как WebAssembly помогает нам сделать наше приложение быстрее и безопаснее?

Здесь все становится интереснее, поскольку в городе есть мальчик по имени WASM. Которые имеют возможность встроенной компиляции в Интернет. Это не что иное, как просто язык программирования, или, можно сказать, цель компиляции, которая преобразует ваши кроссплатформенные языки в язык WASM, понятный браузеру. Вы конвертируете файл «.c» или «.py» в файл «.s», который является файлом сборки. Вы не пишете свой код непосредственно в WASM. Вместо этого вы пишете свой код на подходящем кроссплатформенном языке, а WASM преобразует ваш код непосредственно в машинный код, чтобы браузер мог его понять и выполнить. Что делает WASM чрезвычайно быстрым, так это небольшое количество этапов, которые он проходит перед выполнением. Как и в JavaScript, ваш код сначала анализируется, затем преобразуется в AST, затем отправляется на оптимизацию и затем выполняется. В то время как в WASM он напрямую декодируется, затем компилируется вместе с оптимизацией и затем выполняется.

Поскольку модуль WebAssembly (WASM) также выполняется в песочнице, что обеспечивает высокий уровень безопасности, он не может использовать эксплойты на уровне операционной системы, поскольку код все еще выполняется в той же песочнице, которую браузер предоставляет JavaScript, и это это причина, по которой ему разрешен запуск в браузере. Более того, в отличие от JavaScript, вам не нужно ждать полной загрузки полезных данных JSON, прежде чем анализировать их. Если есть файл WASM, скажем, размером 5 МБ, то по мере загрузки его фрагментов они преобразуются в машинный код и выполняются, что делает WASM сверхбыстрым.

Пример:FFmpeg — это бесплатное программное обеспечение с открытым исходным кодом, которое состоит из библиотек для обработки аудио, видео или других мультимедийных файлов. Интересно то, что это программное обеспечение высоко оптимизировано и создано на C++ с помощью WASM. FFmpeg работает в браузере. Поскольку это программное обеспечение, написанное на C++, сначала было преобразовано в двоичный формат WASM, чтобы браузер мог его понять.

Заменит ли WASM JavaScript?

После раскрытия возможностей WebAssembly (WASM). Этот большой вопрос, конечно, возникнет у вас в голове. Так что ответ НЕТ!

WASM не предназначен для работы с JavaScript, но предназначен для работы сJavaScript.

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

Заключение

Подводя итог, можно сказать, что WASM — это язык программирования, который выполняется в «песочнице», что позволяет запускать его в браузере. Для выполнения задач, предназначенных для ЦП, JavaScript не подходит из-за его динамического поведения. Для таких задач мы используем языки, которые обеспечивают больший контроль над оборудованием, такие как C/C++ или Rust и т. д. Но эти языки не выполняются в «песочнице», и поэтому их нельзя запускать в браузере. Итак, чтобы запустить кроссплатформенный код, мы конвертируем наши файлы в файл WASM, а затем запускаем его в браузере. Самое замечательное, что мы приближаемся к естественной скорости браузера. Поскольку WASM также выполняется в той же песочнице, в которой браузер предоставляет JavaScript, проблем с безопасностью не возникает. WASM становится популярным и адаптируется различными технологическими компаниями из реального мира благодаря своей гарантированной производительности и безопасности.

Большое спасибо, что дочитали до этого места. Надеюсь, вы найдете эту статью информативной и полезной. Если да, то поделитесь этим с друзьями. Если вы хотите быть в курсе новейших технологий и последних тенденций отрасли, подписывайтесь на меня в X/Twitter и свяжитесь со мной в LinkedIn. Я публикую много информативного и обучающего контента, связанного с программированием и новейшими технологиями.