{Вы не знаете JS} Асинхронная обработка и оптимизация
Каким бы опытом программирования на JavaScript вы ни обладали, скорее всего, вы не понимаете язык в полной мере. Это лаконичное, но при этом глубоко продуманное руководство посвящено новым асинхронным возможностям и средствам повышения производительности, которые позволяют создавать сложные одностраничные веб-приложения и избежать при этом «кошмара обратных вызовов».
Как и в других книгах серии «Вы не знаете JS», вы познакомитесь с нетривиальными особенностями языка, которых так боятся программисты. Только вооружившись знаниями можно достичь истинного мастерства.
В книге рассматриваются следующие темы:
- Старые и новые методы асинхронного программирования.
- Использование обещаний JavaScript для решения проблемы «инверсии управления».
- Применение генераторов для асинхронного выполнения в последовательной форме.
- Повышение быстродействия с использованием веб-работников, SIMD и asm.js.
- Методы хронометража и оптимизации выражений и команд.
Об авторе:
Кайл Симпсон - евангелист Open Web и энтузиаст JavaScript. Он пишет книги, читает лекции, выступает на семинарах, конференциях и является лидером OSS.
Предисловие. 10
Введение. 12
Задача. 13
О книге. 15
Типографские соглашения. 15
Использование программного кода примеров. 16
От издательства. 17
Глава 1. Асинхронность: сейчас и потом. 18
Блочное строение программы. 19
Асинхронный вывод в консоль. 22
Цикл событий. 23
Параллельные потоки. 26
Выполнение до завершения. 30
Параллельное выполнение. 33
Отсутствие взаимодействий. 36
Взаимодействия. 36
Кооперация. 42
Задания. 45
Упорядочение команд. 46
Итоги. 50
Глава 2. Обратные вызовы. 52
Продолжения. 53
Последовательное мышление. 55
Работа и планирование. 56
Вложенные/сцепленные обратные вызовы. 59
Проблемы доверия. 65
История о пяти обратных вызовах. 66
Не только в чужом коде. 69
Попытки спасти обратные вызовы. 71
Итоги. 76
Глава 3. Обещания. 78
Что такое обещание? . 79
Будущее значение. 80
Событие завершения. 86
События обещаний . 90
Утиная типизация с методом then()(thenable) . 93
Доверие Promise. 96
Слишком ранний обратный вызов . 97
Слишком поздний обратный вызов. 97
Обратный вызов вообще не вызывается. 100
Слишком малое или слишком большое количество
вызовов. 101
Отсутствие параметров/переменных среды . 102
Поглощение ошибок/исключений. 102
Обещания, заслуживающие доверия?. 104
Формирование доверия. 108
Сцепление . 109
Терминология: разрешение, выполнение и отказ. 118
Обработка ошибок . 121
Бездна отчаяния . 125
Обработка неперехваченных ошибок. 126
Бездна успеха. 128
Паттерны обещаний. 131
Promise.all([ .. ]). 131
Promise.race([ .. ]). 133
Вариации на тему all([ .. ]) и race([ .. ]) . 137
Параллельно выполняемые итерации. 139
Снова о Promise API . 140
Конструктор new Promise(..). 141
Promise.resolve(..) и Promise.reject(..). 141
then(..) и catch(..). 142