Складчина: Асинхронное программирование JavaScript [Андрей Кобец]
Иногда на просторах интернета встречаются глупости про JavaScript — мол, смешной язык со своими «онкликами и колбэками». Чаще всего такое пишут люди, не погружённые в контекст JS, либо просто невежественные.
Но дыма без огня не бывает. На чём же основана такая критика?
Мы знаем, что асинхронный подход куда эффективнее в задачах с большой долей ввода-вывода (I/O). В таком супер-интерактивном приложении, как браузер, работа с I/O занимает львиную часть. Поэтому создатели браузеров приняли единственно верное решение и взяли за основу именно асинхронный подход.
Однако проблема в том, что асинхронное программирование без специальной инфраструктуры практически моментально скатывается в «вермишель» из вложенных друг в друга колбэков.
Сейчас эти проблемы решаются с помощью:
- промисов
- асинхронных итераторов и потоков данных
- async/await и top await
Поэтому даже начинающему специалисту нужно крепко разбираться в нюансах и подводных камнях этих абстракций. Без этого асинхронность остаётся «магией, которая иногда работает», а её цена превращается в головную боль, а не в осознанный выбор.
Чтобы закрыть этот пробел и превратить сложность в понятную, управляемую силу, на следующей неделе проведу небольшой live-интенсив. Интенсив посвящён детальному изучению асинхронного программирования в JavaScript, включая всесторонний разбор Promise Api — но не ограничиваясь только им.
Мы разберём:
- нюансы реализации Event Loop в браузере и Node.js
- подводные камни и узкие места для производительности
- паттерны достижения многозадачности и отзывчивости интерфейса
Каждая лекция — это важный пазл общей картины. Я постарался сделать программу так, чтобы она не вызывала информационного взрыва, а плавно вела по теме.
Программа:
Асинхронное программирование в JS:
- Колбэки и промисы
- Event Loop: как всё это крутится
- Таски и микротаски
- Асинхронность и параллельность
- Способы создания, выстраивание цепочек, обработка ошибок
- Концепция Thenable-объектов
- Сложные композиции
- Отмена промисов
- Конечные автоматы, сопрограммы и async/await
- Асинхронные модули и top await
- Асинхронные итераторы и for await
- Нюансы и баги
Скрытая ссылка