21
Real-time данные на фронтенде Сергей Рубанов JavaScript Samurai

Real-time данные на фронтенде

  • Upload
    exante

  • View
    100

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Real-time данные на фронтенде

Real-time данные на фронтенде

Сергей РубановJavaScript Samurai

Page 2: Real-time данные на фронтенде
Page 3: Real-time данные на фронтенде
Page 4: Real-time данные на фронтенде

• Многие баги, которые туда попали однажды и были как-либо использованы, остаются там навсегда

• Всё в вебе должно иметь обратную совместимость• Вендоры браузеров не готовы поддерживать все

стандарты• Существуют конкурирующие группы разработки

стандартов (w3c, whatwg) и конкурирующие спецификации

• Сложность спецификаций растет• Не смотря на значимость принципа обратной

совместимости, вендоры могут убрать поддержку каких-либо Web API в любой момент (WebSQL, AppCache)

Page 5: Real-time данные на фронтенде

• DOM однопоточный и делит тред с мейн тредом JS, рендеринг однопоточный

• WebWorker’ы — ограниченные потоки• не имеют доступа к localStorage• не имеют доступа к DOM• требуют использования сериализации или структурного

клонирования (может циклические зависимости, но не может дескрипторы, геттеры, сеттеры, цепочку прототипов)

• Web Storage синхронный и требует сериализации данных• IndexedDB имеет много багов в Safari и неполную

реализацию в IE• Нормальных подписок в браузере не существует в

принципе

Page 6: Real-time данные на фронтенде

• Изначально содержит баги, которые не могут быть исправлены

• Не был спроектирован для создания приложений• Практически отсутствующие возможности управления

памятью• Непредсказуемое поведение GC• Примитивная система типов

• Некоторые типы ошибок нельзя выявить на этапе написания

• Никакая математика• Условная, во многом ограниченная многопоточность

• Отсутствие разделяемой памяти

Page 7: Real-time данные на фронтенде

JavaScript fatigue

Page 8: Real-time данные на фронтенде

Как не поддаться JavaScript fatigue

• Принять факт, что все очень плохо• Использовать статическую проверку

типов (TypeScript и Flow)• это лучше, чем использовать

компиляцию из других, синтаксически более далеких от JS языков

• Использовать линтеры (TSLint, ESLint)

Page 9: Real-time данные на фронтенде

Ускоряем JavaScript• Не используем новые фичи языка (или

транспилируем код в ES5.1)• Пишем императивный код в стиле Си• Используем TypedArrays везде, где возможно• Используем asm.js для математики

• есть оверхед по размеру файла• нужен разработчик, который умеет C / C++

/ Rust

Page 10: Real-time данные на фронтенде

Популярные заблуждения о

фронтенд-разработке• JavaScript медленный• DOM медленный• Чтобы сделать приложение быстрым,

надо переписать его на React (Angular 2 / Preact / Riot / Vue / etc.)

Page 11: Real-time данные на фронтенде

Как сделать real-time web-приложения

производительными и отзывчивыми?

Page 12: Real-time данные на фронтенде

Нужно держать UI-тред свободным

Page 13: Real-time данные на фронтенде

Canvas?SVG?

WebGL?

Page 14: Real-time данные на фронтенде

или VanillaJS?

Page 15: Real-time данные на фронтенде

Web Workers

Page 16: Real-time данные на фронтенде

Service Worker

Page 17: Real-time данные на фронтенде

Service Worker

Page 18: Real-time данные на фронтенде

IndexedDB

Page 19: Real-time данные на фронтенде
Page 20: Real-time данные на фронтенде

Market Data APIhttps://developers.exante.eu/

Page 21: Real-time данные на фронтенде

Задавайте вопросы!

@chicoxyzzy