В книге подробно рассматриваются принципы работы WebAssembly – компактной межплатформенной технологии, которая оптимизирует производительность ресурсоемких веб-приложений и программ.
Вы узнаете, как оптимизировать, компилировать и отлаживать низкоуровневый код, сравнивать его производительность с JavaScript, а также представлять код в удобном для прочтения текстовом формате WebAssembly Text (WAT). Затем сможете создать программу обнаружения столкновений на базе браузера, поработать с технологиями рендеринга в браузере для создания графики и анимации и выяснить, как WebAssembly взаимодействует с другими языками программирования.
Книга адресована веб-разработчикам, желающим понять, как создавать и развертывать приложения на основе WebAssembly, а также пользователям, которые хотят изучить и применять эту технологию.
Author(s): Рик Баттальини
Edition: 1
Publisher: ДМК Пресс
Year: 2021
Language: Russian
Commentary: Vector PDF
Pages: 310
City: М.
Tags: Web Applications; WebAssembly
От издательства
О техническом рецензенте
Об авторе
Предисловие
Благодарности
Введение
Глава 1. Введение в WebAssembly
Что такое WebAssembly?
Причины использовать WebAssembly
Интеграция существующих библиотек
Повышение производительности
Портируемость на другие платформы и безопасность
Противники JavaScript
Связь WebAssembly с JavaScript
Зачем учить WAT?
Стили кодирования WAT
Среда встраивания
WASI
Браузер
Visual Studio Code
Node.js
Наше первое приложение WebAssembly с помощью Node.js
Вызов модуля WebAssembly из Node.js
Синтаксис .then
Удачное время
Глава 2. Основы работы с WebAssembly Text
Hello World в WebAssembly
Создание WAT-модуля
Создание файла JavaScript
Написание простейшего модуля
Переменные WAT
Глобальные переменные и преобразование типов
Локальные переменные
Распаковка S-выражений
Переменные с индексами
Преобразование между типами
Условные операторы if/else
Операторы цикла и блока
Оператор блока (block)
Оператор цикла (loop)
Совместное использование операторов блока и цикла
Переход с помощью br_table
Заключение
Глава 3. Функции и таблицы
Когда следует вызывать функции из WAT
Разработка функции is_prime
Передача параметров
Создание внутренних функций
Функция is_prime
Код на стороне JavaScript
Объявление импортированной функции
Объекты в WAT
Передача типов данных
Числа JavaScript
Влияние вызовов внешних функций на производительность
Таблицы функций
Создание таблицы функций в WAT
Заключение
Глава 4. Низкоуровневые битовые операции
Системы счисления: двоичная, десятичная и шестнадцатеричная
Арифметические операции над целыми числами и числами с плавающей запятой
Целые числа
Числа с плавающей запятой
Биты старшего и младшего разрядов
Битовые операции
Сдвиг и вращение битов
Маскирование битов с помощью AND и OR
Инверсия битов с помощью XOR
Обратный vs. прямой порядок байтов
Заключение
Глава 5. Строки в WebAssembly
ASCII и Unicode
Строки в линейной памяти
Передача длины строки в JavaScript
Строки с завершающим нулем
Строки с префиксом длины
Копирование строк
Создание числовых строк
Создание шестнадцатеричной строки
Создание двоичной строки
Заключение
Глава 6. Линейная память
Линейная память в WebAssembly
Страницы
Указатели
Объект памяти JavaScript
Создание объекта памяти WebAssembly
Запись в консоль в цвете
Создание JavaScript в store_data.js
Обнаружение столкновений
Начальный адрес, шаг и сдвиг
Загрузка структур данных из JavaScript
Отображение результатов
Функция обнаружения столкновений
Заключение
Глава 7. Веб-приложения
DOM
Создание и настройка простого сервера Node
Первое веб-приложение WebAssembly
JavaScript
Определение HTML-заголовка
HTML-тег
Готовое веб-приложение
Шестнадцатеричные и двоичные строки
HTML
WAT
Компиляция и запуск
Заключение
Глава 8. Работа с Canvas
Рендеринг HTML-страницы на холсте
Определение холста в HTML
Определение констант JavaScript в HTML
Создание случайных объектов
Данные растрового изображения
Функция requestAnimationFrame
Модуль WAT
Импортируемые значения
Очистка холста
Функция вычисления абсолютного значения
Установка цвета пикселя
Рисуем объект
Установка и получение атрибутов объекта
Функция $main
Компиляция и запуск приложения
Заключение
Глава 9. Оптимизация производительности
Использование профилировщика
Профилировщик Chrome
Профилировщик Firefox
wasm-opt
Запуск wasm-opt
Установка Binaryen
Взглянем на оптимизированный код WAT
Приемы повышения производительности
Встраивание функций
Умножение и деление vs. сдвиг
DCE
Сравнение приложения обнаружения столкновений с JavaScript
Оптимизация WAT вручную
Запись производительности в лог
Более сложное тестирование с помощью benchmark.js
Сравнение WebAssembly и JavaScript с флагом --print-bytecode
Заключение
Глава 10. Отладка WebAssembly
Отладка из консоли
Запись сообщений в консоль
Предупреждения об ошибках
Трассировка стека
Отладчик Firefox
Отладчик Chrome
Заключение
Глава 11. AssemblyScript
Интерфейс командной строки в AssemblyScript
Приложение Hello World на AssemblyScript
Код JavaScript для приложения Hello World
Приложение Hello World в загрузчике AssemblyScript
Объединение строк AssemblyScript
Объектно-ориентированное программирование на AssemblyScript
Приватные атрибуты
Среда встраивания JavaScript
Загрузчик AssemblyScript
Расширение классов в AssemblyScript
Сравнение производительности загрузчика и прямых вызовов WebAssembly
Заключение
Послесловие
Предметный указатель
О техническом рецензенте
Об авторе
Предисловие
Благодарности
Введение
Глава 1. Введение в WebAssembly
Что такое WebAssembly?
Причины использовать WebAssembly
Интеграция существующих библиотек
Повышение производительности
Портируемость на другие платформы и безопасность
Противники JavaScript
Связь WebAssembly с JavaScript
Зачем учить WAT?
Стили кодирования WAT
Среда встраивания
WASI
Браузер
Visual Studio Code
Node.js
Наше первое приложение WebAssembly с помощью Node.js
Вызов модуля WebAssembly из Node.js
Синтаксис .then
Удачное время