121

Построение мультисервисного стартапа в реалиях full-stack javascript

  • Upload
    fdconf

  • View
    2.038

  • Download
    7

Embed Size (px)

DESCRIPTION

Артем Захарченко воркшоп «Построение мультисервисного стартапа в реалиях full-stack javascript»​ Frontend Dev Conf'14 www.fdconf.by

Citation preview

Page 1: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 2: Построение мультисервисного стартапа в реалиях full-stack javascript

Кто это?

● Gameloft● DevPro● Pics.io

@blackrabbit99

Page 3: Построение мультисервисного стартапа в реалиях full-stack javascript

Назад в будущее

Page 4: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 5: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 6: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 7: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 8: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 9: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 10: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 11: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 12: Построение мультисервисного стартапа в реалиях full-stack javascript

JS binary data

Page 13: Построение мультисервисного стартапа в реалиях full-stack javascript

Задача● Принять/загрузить файл● ????????● Profit

Page 14: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 15: Построение мультисервисного стартапа в реалиях full-stack javascript

DNG is open

Page 16: Построение мультисервисного стартапа в реалиях full-stack javascript

Что делать с закрытыми?

Искать open source конверторы

Page 17: Построение мультисервисного стартапа в реалиях full-stack javascript

Что делать с закрытыми?

Экспериментировать

Page 18: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 19: Построение мультисервисного стартапа в реалиях full-stack javascript

Canvas Fast drawing

Page 20: Построение мультисервисного стартапа в реалиях full-stack javascript

Целочисленные значения

ctx.drawImage(myImage, 0.3, 0.5)

Page 21: Построение мультисервисного стартапа в реалиях full-stack javascript

CSS3 transform

Page 22: Построение мультисервисного стартапа в реалиях full-stack javascript

Nearest-neighbour rendering

Page 23: Построение мультисервисного стартапа в реалиях full-stack javascript

Не скейлить с помощью drawImage

Page 24: Построение мультисервисного стартапа в реалиях full-stack javascript

Minimize Garbage Collection

Page 25: Построение мультисервисного стартапа в реалиях full-stack javascript

Pool common objects and classes

Page 26: Построение мультисервисного стартапа в реалиях full-stack javascript

Не создавайте мусор● Array.slice● Array.splice● Function.bind

Page 27: Построение мультисервисного стартапа в реалиях full-stack javascript

Асинхронный localStorage API с IndexedDB

Page 28: Построение мультисервисного стартапа в реалиях full-stack javascript

Микрооптимизация● Use x | 0 instead of Math.floor● Clear arrays with .length = 0 to avoid creating a new Array● Use if .. else over switch● Use TypedArrays for floats or integers (e.g. vectors and matrices)

Page 29: Построение мультисервисного стартапа в реалиях full-stack javascript

Debouncing

● Реальный вызов происходит только в случае, если с момента последней

попытки прошло время, большее или равное задержке.

● Реальный вызов происходит сразу, а все остальные попытки вызова

игнорируются, пока не пройдет время, большее или равное задержке,

отсчитанной от времени последней попытки.

Page 30: Построение мультисервисного стартапа в реалиях full-stack javascript

Троттлинг

● выполнение метода не чаще одного раза в указанный период, даже если он будет вызван много раз в течение этого периода

Page 31: Построение мультисервисного стартапа в реалиях full-stack javascript

Веб воркеры

Page 32: Построение мультисервисного стартапа в реалиях full-stack javascript

WebRTC В production уже сегодня

Захарченко Артем[email protected]@blackrabbit99

Page 33: Построение мультисервисного стартапа в реалиях full-stack javascript

Немного ностальгии

Page 34: Построение мультисервисного стартапа в реалиях full-stack javascript

Mosaic

Page 35: Построение мультисервисного стартапа в реалиях full-stack javascript

IE

Page 36: Построение мультисервисного стартапа в реалиях full-stack javascript

Netscape

Page 37: Построение мультисервисного стартапа в реалиях full-stack javascript

И тут понеслась

Page 38: Построение мультисервисного стартапа в реалиях full-stack javascript

Общее введение

Page 39: Построение мультисервисного стартапа в реалиях full-stack javascript

И тут понеслась

Page 41: Построение мультисервисного стартапа в реалиях full-stack javascript

Структура WebRTC приложения

Page 42: Построение мультисервисного стартапа в реалиях full-stack javascript

Media Stream

Page 44: Построение мультисервисного стартапа в реалиях full-stack javascript

RTCPeerConnection

Page 45: Построение мультисервисного стартапа в реалиях full-stack javascript

ICE framework

● сбор местных IP и порт. ● проверка подключения между пирами● keep alive соединения

Page 46: Построение мультисервисного стартапа в реалиях full-stack javascript

Signaling server

● Инициализация связи● Сетевые настройки● Информация о кодеках/браузерах

Page 47: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 48: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 49: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 50: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 51: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 52: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 53: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 54: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 55: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 56: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 57: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 58: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 59: Построение мультисервисного стартапа в реалиях full-stack javascript

Stun

Page 60: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 61: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 62: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 63: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 64: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 65: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 66: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 67: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 68: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 69: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 70: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 71: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 72: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 73: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 74: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 75: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 76: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 77: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 78: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 79: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 80: Построение мультисервисного стартапа в реалиях full-stack javascript

SDP

Page 81: Построение мультисервисного стартапа в реалиях full-stack javascript

RTCPeerConnection

1. Обработка потерянных пакетов2. Подавление эха3. Пропускная способность 4. Динамическая буферизация5. Снижение и подавление шума 6. Очистка изображения

Page 83: Построение мультисервисного стартапа в реалиях full-stack javascript

All fine

Page 84: Построение мультисервисного стартапа в реалиях full-stack javascript

Где же проблемы?

Page 85: Построение мультисервисного стартапа в реалиях full-stack javascript

А вот и они!

Page 86: Построение мультисервисного стартапа в реалиях full-stack javascript

Идеальный мир

Page 87: Построение мультисервисного стартапа в реалиях full-stack javascript

Реальный мир

Page 88: Построение мультисервисного стартапа в реалиях full-stack javascript

Turn

Page 90: Построение мультисервисного стартапа в реалиях full-stack javascript

RTCDataChannel

Page 91: Построение мультисервисного стартапа в реалиях full-stack javascript

Основные проблемы

● Скорость● Размер файлов● Размер чанков

Page 92: Построение мультисервисного стартапа в реалиях full-stack javascript

Поддержка

Page 93: Построение мультисервисного стартапа в реалиях full-stack javascript

Safari

RIP???

Page 94: Построение мультисервисного стартапа в реалиях full-stack javascript

Safari

Page 95: Построение мультисервисного стартапа в реалиях full-stack javascript

IE

● CU-RTC-Web● или Google Chrome Frame

Page 96: Построение мультисервисного стартапа в реалиях full-stack javascript

Статистика

Page 97: Построение мультисервисного стартапа в реалиях full-stack javascript

Open Source

● PeerJs● EasyRTC● PubNub● ShareFest● WebRTC.io

Page 98: Построение мультисервисного стартапа в реалиях full-stack javascript

Chrome OS packaged apps

Page 99: Построение мультисервисного стартапа в реалиях full-stack javascript

Зачем это все?● Запуск offline● Доступ к возможностям платформы● Невероятнейший user experience● Установка и апдейты прямо из Chrome Market

Page 100: Построение мультисервисного стартапа в реалиях full-stack javascript

Из Web

Page 101: Построение мультисервисного стартапа в реалиях full-stack javascript

в Offline

Page 102: Построение мультисервисного стартапа в реалиях full-stack javascript

Жизнь в офлайне● Файлы хранятся локально● Online features работают только при наличии

подключения● Храним данные локально● HTML5 Filesystem API

Page 103: Построение мультисервисного стартапа в реалиях full-stack javascript

Структура приложения

Page 104: Построение мультисервисного стартапа в реалиях full-stack javascript

Пример. chrome.storage

Page 105: Построение мультисервисного стартапа в реалиях full-stack javascript

Доступ к платформе

Page 106: Построение мультисервисного стартапа в реалиях full-stack javascript

Доступ к платформе● File● USB● Bluetouth● Socket

Page 107: Построение мультисервисного стартапа в реалиях full-stack javascript

Безопасность и CSP● Никакого eval● Никаких new Function● Забываем о существовании Iframe● Указываем откуда приходит контент

Page 108: Построение мультисервисного стартапа в реалиях full-stack javascript

Пример кода

Page 109: Построение мультисервисного стартапа в реалиях full-stack javascript

Еще секьюрити● Вставка контента через

WebView

● Доступ к удаленным ресурсамXHR, blob, filesystem

● ШаблонизаторПрекомпилируемые библиотеки или MustacheSandox для вызовов eval/new Function

Page 110: Построение мультисервисного стартапа в реалиях full-stack javascript

Итог● Offline

Написание не зависимых приложений

● CouldХраним данные в google хранилищах

● UI/UXКаждый js-ер хотел сделать нативные окошки

● Доступ к железуfile system/usb

● Не забываем о безопасности

Page 111: Построение мультисервисного стартапа в реалиях full-stack javascript

Backbonexs

Page 112: Построение мультисервисного стартапа в реалиях full-stack javascript

Что мы хотим?

1. Бизнес логика не зависит от UI и backend

2. Абсолютно автономная инициализация

3. Single responsibility principe

Page 113: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 114: Построение мультисервисного стартапа в реалиях full-stack javascript

SUPERVISING PRESENTER

Page 115: Построение мультисервисного стартапа в реалиях full-stack javascript

MVVM

Page 116: Построение мультисервисного стартапа в реалиях full-stack javascript

HMVC

Page 117: Построение мультисервисного стартапа в реалиях full-stack javascript

jQuery?

Page 118: Построение мультисервисного стартапа в реалиях full-stack javascript
Page 119: Построение мультисервисного стартапа в реалиях full-stack javascript

Exoskeleton

No jQueryNo Undescore

Page 120: Построение мультисервисного стартапа в реалиях full-stack javascript

Frameworks

MarionetteChaplinThorax

Page 121: Построение мультисервисного стартапа в реалиях full-stack javascript

Aura