Transcript
Page 1: ES6 Generators On Koa.js Example
Page 2: ES6 Generators On Koa.js Example

ИСПОЛЬЗОВАНИЕ ES6 ГЕНЕРАТОРОВНА ПРИМЕРЕ KOA.JS

Александр Трищенко

Senior Front-end Developer, DataArt

14 августа 2016

Page 3: ES6 Generators On Koa.js Example

Агенда

• Итераторы. Генераторы.

• Использование генераторов (Redux, Koa)

• Зачем нам использовать koa.js

• Будущее. Async Await и koa.js 2.x

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 3

Page 4: ES6 Generators On Koa.js Example

ECMAScript 2015

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 4

Page 5: ES6 Generators On Koa.js Example

Итераторы Кратко

• Теперь все, что можно перебрать – итерируемый объект

(iterable)

• Все что не перебирается само по себе – можно заставить с

помощью своего Symbol.iterator

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 5

Page 6: ES6 Generators On Koa.js Example

ИтераторыИтерирование

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 6

Page 7: ES6 Generators On Koa.js Example

ИтераторыСоздание итератора

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 7

Page 8: ES6 Generators On Koa.js Example

Препосылки появления генераторов

14 августа 2016 8

Динамика популярности Node.js за последние 5 лет

Динамика популярности запроса Callback Hell за 5 лет

Page 9: ES6 Generators On Koa.js Example

СТРУКТУРНАЯ

ВИЗУАЛИЗАЦИЯ JS

КОДА БЕЗ

ГЕНЕРАТОРОВ

12 August 2016

Page 10: ES6 Generators On Koa.js Example

ГенераторыПрименение

• Написание синхронного кода

• Написание приостанавливаемых функций

• Написание комплексных итераторов

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 10

Page 11: ES6 Generators On Koa.js Example

ГенераторыОсновная идея

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 11

Реализация с использованием Promise

Реализация с использованием генераторов

Page 12: ES6 Generators On Koa.js Example

ГенераторыСинтаксис

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 12

Page 13: ES6 Generators On Koa.js Example

ГенераторыМетод next()

• Может принимать в качестве аргумента значение, что

будет проброшено в генератор

• Возвращаемое значение – объект с двумя ключами

– value – часть выражения получаемая из генератора

– done – булево состояние генератора

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 13

Page 14: ES6 Generators On Koa.js Example

ГенераторыПроизводительность

14 августа 2016 14

0,3346

0,3242

0,2851

0,6628

0,777

0,6085

0 0,2 0,4 0,6 0,8 1

Generators

Promises

Callbacks

Firefox Chrome

Page 15: ES6 Generators On Koa.js Example

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 15

Page 16: ES6 Generators On Koa.js Example

redux-sagaЕще одна библиотека

• Это библиотека

• Это библиотека написанная на генераторах

• Это библиотека, которая прячет impure функции с глаз

долой

• Это библиотека, которая позволяет вам писать

синхронный код

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 16

Page 17: ES6 Generators On Koa.js Example

redux-sagaНа практике

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 17

Page 18: ES6 Generators On Koa.js Example

redux-sagaНа практике

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 18

Page 19: ES6 Generators On Koa.js Example

redux-sagaПослесловие

• Саги (Sagas) не декларируются как обычные Actions,

их необходимо внедрять через sagaMiddleware

• Очевидно, что сам sagaMiddleware – ничто иное, как

middleware вашего store.

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 19

Page 20: ES6 Generators On Koa.js Example

14 августа 2016 20

Page 21: ES6 Generators On Koa.js Example

koa.jsВ двух словах

• node.js фреймворк для серверной разработки

• node.js фреймворк который использует ES6

генераторы, асинхронные функции ES2016.

• node.js фреймворк написанный командой express.js

• «Фреймворк нового поколения»

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 21

Page 22: ES6 Generators On Koa.js Example

АРХИТЕКТУРНАЯ

ДИАГРАММА

РЕАЛИЗАЦИИ

MIDDLEWARE В KOA.JS

12 August 2016

Page 23: ES6 Generators On Koa.js Example

koa.jsMiddleware

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 23

Page 24: ES6 Generators On Koa.js Example

koa.jsПреимущества

• Наличие огромного количества библиотек обернутых в

co.js

• Модульность и легковесность

• Возможность писать более понятный код

• Возможность писать меньше кода

• Высокая активность сообщества

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 24

Page 25: ES6 Generators On Koa.js Example

koa.jsПреимущества

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 25

Middleware ядро Маршрутизация Шаблонизатор HTTP утилиты

Koa + - - -

Express + + + +

Connect + - - -

Page 26: ES6 Generators On Koa.js Example

koa.js Пара полезных пакетов для старта

• Koa-cors – разрешаем кроссдоменные запросы одной

строкой

• koa-route – полноценный роутинг

• koa-jwt – Серверная реализация авторизации с

использованием JWT токена.

• koa-bodyparse – парсер тела приходящих запросов

• koa-send – управление статикой

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 26

Page 27: ES6 Generators On Koa.js Example

koa.js Недостатки

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 27

Page 28: ES6 Generators On Koa.js Example

koa.js 2

Фреймворк нового поколения?

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 28

Page 29: ES6 Generators On Koa.js Example

Async functionsОбзор

• Async это Promise.

• Await это Promise.

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 29

Page 30: ES6 Generators On Koa.js Example

Async functionsCинтаксис

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 30

Page 31: ES6 Generators On Koa.js Example

Async functionsПослесловие

• Асинхронные функции удобнее генераторов (меньше

кода, нет необходимости «оборачивать» промисы для

генераторов).

• Асинхронные функции пока еще не часть стандарта и

не ясно, будут ли вообще его частью.

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 31

Page 32: ES6 Generators On Koa.js Example

Мораль

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 32

Page 33: ES6 Generators On Koa.js Example

Список используемых ресурсов

14 августа 2016 И С П О Л Ь З О В А Н И Е E S 6 Г Е Н Е Р А Т О Р О В Н А П Р И М Е Р Е K O A . J S 33

Рисунки заимствовал тутhttps://www.b17.ru/foto/uploaded/f3617e15cc29ca89af

0d7e37e790d1b9.jpg

http://drawi.ru/pict/158576

http://rus.tvnet.lv/showbiz/kultura/251662-

gjeroi_populjarnogo_multsjeriala_kot_ljeopold_jedut_

v_rigu

Сниппеты заимствовал тутhttps://developer.mozilla.org/ru/

Page 34: ES6 Generators On Koa.js Example

Спасибо

14 августа 2016 34

https://www.facebook.com/tryshchenko

[email protected]

Page 35: ES6 Generators On Koa.js Example