НЕКОТОРЫЕ ВОПРОСЫ ИСПОЛЬЗОВАНИЯ ТЕХНОЛОГИИ WEBASSEMBLY В СОВРЕМЕННЫХ БРАУЗЕРАХ Григоренко А.В.
Григоренко Александр Вадимович - студент, Институт цифровой экономики и информационных технологий, Российский экономический университет им. Г.В. Плеханова, г. Москва
Аннотация: в статье рассматривается технология Web Assembly, принцип ее работы, области применения и возможности, которые открываются с ее интеграцией в современные браузеры. Плюсы и минусы использования данной технологии. Ключевые слова: WebAssembly, браузеры, кроссплатформенность, безопасность, байткод, нейронные сети.
УДК 004.42
С появлением интернета веб-технологии находятся в постоянном развитии. Сначала была изобретена гипертекстовая разметка и статичный контент сайта, позже он сменился динамическим, появились новые инструменты для генерации html и css, специальные фреймворки, предназначенные для разделения веб-сайта на модули, рендеринг страниц на стороне сервера. Позже стали популярными SPA [1], создали разнообразные инструменты сборки-бандлирования javascript кода и стилей. Мир фронтэнда очень расширился, но одна из основных проблем веба осталась - невозможность написать на javascript в браузере полноценные приложения, которые могли бы работать как нативные.
Однако появилась технология, которая позволяет запускать готовые приложения прямо в браузере - WebAssembly. Под термином WebAssembly будем подразумевать бинарный формат инструкций для стековой виртуальной машины [2]. WebAssembfy представляет собой переносимое абстрактное синтаксическое дерево, то есть конечное помеченное ориентированное дерево, в котором внутренние вершины сопоставлены (помечены) с операторами языка программирования, а листья — с соответствующими операндами [3], обеспечивающее как более быстрый парсинг, так и более быстрое выполнение кода, чем просто сам JavaScript. За счет этого данная технология приносит новые возможности и большой прирост производительности. Сами разработчики не пишут инструкции на webassembly коде, они компилируют низкоуровневые языки, такие как C, C++, Rust, а также все интерпретируемые языки.
По сути, WebAssembly позволяет запускать приложения, написанные на нескольких языках, в вебе на скорости, близкой к скорости обычных веб-сайтов. Нужно сразу обратить внимание на то, что код, скомпилированный при помощи WebAssembly, не может работать быстрее, чем javascript. С одной стороны это минус, но с другой стороны современные движки браузеров делают очень качественные оптимизации, которые позволяют достичь около «С++-ных» скоростей. Замеры скоростей javascript и C++ с применением пяти фильтров на изображении представлены на Рисунке 1.
Рис. 1. Сравнение производительности C++ с Javascript в WebAssembly
Еще одним плюсом является то, что можно вообще не знать, как писать код для WebAssembly, так как ее модули можно импортировать в веб-приложение, предоставив ей функции для использования, написанные на javascript.
Вслед за автором [4] выделим следующие основные цели WebAssembly:
• Быть быстрым, эффективным и портативным - код WebAssembly может выполняться с близкой скоростью на разных платформах, используя общие аппаратные возможности.
• Быть удобочитаемым и отлаживаемым - WebAssembly — это низкоуровневый язык ассемблера, но он имеет удобный для пользователя текстовый формат (спецификация для которого все еще завершается), что позволяет писать, просматривать и отлаживать код вручную.
• Сохранять безопасность. WebAssembly запускается в безопасной изолированной среде. Как и на обычных веб-страницах данная технология будет иметь те же политики безопасности.
• WebAssembly сконструирован таким образом, что он отлично работает с другими веб-технологиями и поддерживает обратную совместимость.
Отвечая на возникающий вопрос «Как WebAssembly вписывается в веб-браузер?», можно сказать, что браузер можно рассматривать, как:
1) Виртуальная машина (VM), которая запускает код веб-приложения, например. код JavaScript, который активирует веб-приложения, написанный разработчиками.
2) Набор веб-API, который веб-приложение может вызывать для управления функциональностью веб-браузера и позволяет использовать различные инструменты (DOM, CSSOM, WebGL, IndexedDB, Web Audio API и т. Д.).
Исторически сложилось, что VM могла загружать только JavaScript. И это устраивало разработчиков, так как JavaScript достаточно мощный, чтобы решить большинство проблем, которые люди сегодня испытывают в Интернете. Однако мы столкнулись с проблемами производительности при попытке использовать JavaScript для более интенсивных приложений, таких как 3D-игры, Virtual и Augmented Reality, компьютерное зрение, редактирование изображений и видео и ряд других доменов, требующих собственной производительности.
API JavaScript предоставляет разработчикам возможность создавать модули, таблицы и экземпляры. Отдав экземпляр WebAssembly, код JavaScript может синхронно вызывать его экспорт, который отображается как обычные функции JavaScript. Произвольные функции JavaScript также можно синхронно вызывать кодом WebAssembly, передавая в них функции JavaScript как импорт экземпляра WebAssembly. Поскольку JavaScript имеет полный контроль над тем, как загружается, компилируется и запускается код WebAssembly, разработчики JavaScript могут даже думать о WebAssembly как о функции JavaScript для эффективного создания высокопроизводительных функций.
Для компиляции используется и создания WASM кода используется сборщик wasm Emscripten. Инструмент Emscripten способен взять практически любой исходный код C / C ++ и скомпилировать его в модуль .wasm, а также необходимый код «склеивания» JavaScript для загрузки и запуска модуля и HTML-документ для отображения результатов кода (Рисунок 2).
Рис. 2. Принцип работы с Emscripten
Процесс рыботы Emscripten можно описать так:
1) Emscripten сначала передает C / C ++ в clang + LLVM - зрелую программную цепочку компилятора с открытым исходным кодом C / C ++, например, поставляемую как часть XCode на OSX.
2) Emscripten преобразует скомпилированный результат clang + LLVM в двоичный файл .wasm.
3) Сам по себе WebAssembly не может напрямую обращаться к DOM; он может вызывать только JavaScript, передавая примитивные типы данных с целыми числами и с плавающей точкой. Таким образом, для доступа к любому веб-API WebAssembly необходимо вызвать JavaScript, который затем совершает вызов Web API.
Таким образом WebAssembly обеспечивает браузер следующими возможностями [5]:
• Редактирование изображения / видео.
• Игры, которые должны иметь быстрый старт.
• AAA-игры с тяжелыми ресурсами.
• Игровые порталы.
• Музыкальные приложения (потоковая передача, кеширование).
• Распознавание изображений.
• Увеличение видео в реальном времени (например, установка шляп на головы людей).
• VR и дополненная реальность.
• Научная визуализация и моделирование.
• Интерактивное образовательное программное обеспечение и новостные статьи.
• Моделирование / эмуляция платформы (ARC, DOSBox, QEMU, MAME, ...).
• Устные переводчики и виртуальные машины.
• POSIX, позволяя портировать существующие приложения POSIX.
• Инструмент разработчика (редакторы, компиляторы, отладчики, ...).
• Удаленный рабочий стол.
• VPN.
• Шифрование.
• Локальный веб-сервер.
• Общие пользователи NPAPI, в рамках модели безопасности Интернета и API.
• Жирный клиент для корпоративных приложений (например, баз данных).
WebAssembly открывает новый мир в области веб-приложений. Становятся доступными
ранее невозможные типы программ и виды взаимодействия с пользователем. Сообщество из ведущих компаний, такие как Google, Mozilla, Apple, Microsoft вместе создают и развивают данную технологию. Все большую популярность приобретают нейронные сети, дополненная реальность и другие интересные технологии, которые вскоре мы сможем использовать прямо на клиентской стороне - в нашем браузере.
Список литературы
1. Michael Mikowski. Single Page Web Applications: JavaScript end-to-end 1st Edition -Manning Publications Co. 2014. 5 c.
2. Mike Rourke. Learn WebAssembly - Packt Publishing. 2018. 7 c.
3. Википедия. Абстрактное синтаксическое дерево. [Электронный ресурс]. URL: https://m.wikipedia.0rg/wiki/A6cTpaKTH0e_CTHraKcmecK0e^epeB0 (дата обращения: 26.11.2018).
4. MDN Документация. Mozilla: Что такое WebAssembly? [Электронный ресурс]. URL: https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts (дата обращения: 26.11.2018).
5. Официальный сайт WebAssembly. WebAssembly Community Group: Документация WebAssembly. [Электронный ресурс]. URL: https://webassembly.org/docs/use-cases/ (дата обращения: 26.11.2018).
ПЕРСПЕКТИВЫ ОСВОЕНИЯ БАЖЕНОВСКОЙ СВИТЫ НА ТЕРРИТОРИИ ЗАПАДНОЙ СИБИРИ Колос В.Ю.
Колос Виктория Юрьевна - студент, кафедра разработки и эксплуатации нефтяных и газовых месторождений, Тюменский индустриальный университет, г. Тюмень
Аннотация: в статье рассматриваются существующие способы разработки баженовской свиты и их применение передовыми нефтяными компаниями, а также перспективы развития термогазового и термохимического способов разработки. Ключевые слова: геологические особенности пород, баженовская свита, эксплуатация при естественном режиме, способы разработки, многостадийный гидроразрыв пласта, термогазовое воздействие, низкопроницаемые породы.
Баженовской свиты (БС) имеет некоторые особенности: листоватая структура; достаточно не высокие фильтрационно-емкостные свойства коллекторов; аномально высокие пластовые давления в залежах; наличие трещин разной ориентации; хрупкость пород [2]. Поиском способов работы с такими породами занимались следующие нефтегазодобывающие компании: ПАО «Газпром нефть», АО «РИТЭК», АО «Русснефть» и ПАО «Сургутнефтегаз», ПАО «Лукойл», «Роснефть».
Первая эксплуатация опытных участков баженовской свиты проводилась при естественном режиме (Салымское, Ем-Еговское, Правдинское и Маслиховское месторождения). При этом использовалась внутренняя энергия пласта, характеризующаяся аномально высоким пластовым давлением. Вследствие чего добычу нефти получали за счет фонтанирования скважин. Дебит таких скважин достигал 300,0-350,0 т/сут., а иногда доходил до порядка 700,0 т/сут. [5]. При таком способе разработки залежей БС нефтеотдача составляет 3—5%, поэтому наиболее перспективными являются инновационные способы разработки, которые включают: внутрипластовое горение, низкотемпературное окисление, гидроразрывы, термические воздействия и др. [3, с. 46].
Наибольшее распространение получила американская технология: бурение горизонтальных скважин с многостадийным гидроразрывом пласта. Эта технология давно применяется при разработке месторождений с традиционными запасами в пластах имеющих низкую проницаемость, а также находит применение для добычи нефти из БС на Красноленинском месторождении в рамках национального проекта «Газпром нефти» — «Бажен» [7].