Как анимировать тысячи объектов на карте и не...

35
Как анимировать тысячи объектов на карте и не подвесить браузер Ахмедьзянов Данильян ЭТТО 12-я конференция .NET разработчиков 15 мая 2016 dotnetconf.ru

Transcript of Как анимировать тысячи объектов на карте и не...

Page 1: Как анимировать тысячи объектов на карте и не подвесить браузер

Как анимировать тысячи объектовна карте и не подвесить браузер

Ахмедьзянов Данильян

ЭТТО

12-я конференция .NET разработчиков

15 мая 2016

dotnetconf.ru

Page 2: Как анимировать тысячи объектов на карте и не подвесить браузер

2

Задача

● Сложное веб приложение, которое быуправляло уличными работами поремонту городской инфраструктуры.

● Нужна карта для отображенияактуальных данных

● Объектов для отображения на картеочень много (десятки тысяч) и нужно ихотобразить одновременно и сприемлемой скоростью

Page 3: Как анимировать тысячи объектов на карте и не подвесить браузер

3

К сути

● Цель - сделать быстрый движок длярисования объектов на карте

● Рисовать все в браузере, разгрузитьсервер

● Зачем - собственное API, возможностьприменить с любыми другими картами,бесплатность.

Page 4: Как анимировать тысячи объектов на карте и не подвесить браузер

4

Транспортные средства

Page 5: Как анимировать тысячи объектов на карте и не подвесить браузер

5

Метки

Page 6: Как анимировать тысячи объектов на карте и не подвесить браузер

6

Все уже придумано до нас?

● Это уже есть. Яндекс карты. Или Google.Или Bing.

● Крутой движок

● Отличное АПИ

● Отличная кроссплатформенность

● Баги не обнаружены.

● Слои, объекты, метки, GeoJSON… (Тайлы,тайлы повсюду)

Page 7: Как анимировать тысячи объектов на карте и не подвесить браузер

7

Собственное API

● Нет ограничений - можно рисовать всечто угодно

● Все преимущества браузерныхграфических движков

● Благодаря другому движку 10 000обектов не предел

Page 8: Как анимировать тысячи объектов на карте и не подвесить браузер

8

Фотки!

Page 9: Как анимировать тысячи объектов на карте и не подвесить браузер

9

Фотки!

Page 10: Как анимировать тысячи объектов на карте и не подвесить браузер

10

Почему мы НЕ используем APIяндекса● Платность

● Зависимость от АПИ яндекса.

● Низкое быстродействие если многообъектов

● Дорогие ресурсы сервера - рисование насервере невозможно

Page 11: Как анимировать тысячи объектов на карте и не подвесить браузер

11

Грабли - SVG

Pros:

● Удобнейшее API (похоже на DOM-манипуляции)

● Хорошая поддержка браузерами

● Встроенная поддержка всех нужныхпримитивов и растров

Cons:

● Недопустимо низкая производительность ужепри тысяче объектов

Page 12: Как анимировать тысячи объектов на карте и не подвесить браузер

12

Грабли - Canvas2d (FabricJS)

Pros:

● Достаточно удобное API, если использоватьс библиотеками вроде FabricJS

● Хорошая поддержка браузерами

● Аппаратное ускорение

Cons:

● Недопустимо низкая производительностьпри тысячах объектов

Page 13: Как анимировать тысячи объектов на карте и не подвесить браузер

13

НАСТАЛО ВРЕМЯ ИННОВАЦИЙ

Page 14: Как анимировать тысячи объектов на карте и не подвесить браузер

14

WebGL

Page 15: Как анимировать тысячи объектов на карте и не подвесить браузер

15

ЭТО БЫСТРО*

*Быстрее чем я ожидал

Аппаратное ускорение в браузере

Page 16: Как анимировать тысячи объектов на карте и не подвесить браузер

16

Ложка дегтя

● Меньшая кроссбраузерность /кроссплатформенность*

● Большее потребление ресурсов

Page 17: Как анимировать тысячи объектов на карте и не подвесить браузер

17

Page 18: Как анимировать тысячи объектов на карте и не подвесить браузер

18

Бочка меда

● Адаптированное под наши задачи API

● Возможность обрабатывать тысячиобъектов одновременно

Page 19: Как анимировать тысячи объектов на карте и не подвесить браузер

19

PHASERJS

Page 20: Как анимировать тысячи объектов на карте и не подвесить браузер

20

Почему Phaser?

● Отличная документация

● Огромное коммьюнити

● Динамично развивается

● Открытый исходный код

● Есть множество готовых проектов-примеров

● Хорошая производительность для Javascript

● Кроссбраузерность

● Canvas-mode*

Page 21: Как анимировать тысячи объектов на карте и не подвесить браузер

21

Еще немного дегтя

● Производительность анимирования натысячах объектов не впечатляет

● Что делать с кроссбраузерностью /кроссплатформенностью?

Page 22: Как анимировать тысячи объектов на карте и не подвесить браузер

22

Быстрее!

2 слоя - один для статических объектов,другой для анимаций. Статический слой неперерисовывается движком постоянно.

Page 23: Как анимировать тысячи объектов на карте и не подвесить браузер

23

Page 24: Как анимировать тысячи объектов на карте и не подвесить браузер

24

БЫСТРЕЕ!!!

Оптимизация микропередвижений карты -при небольшом перемещении движетсяэлемент, канвас не перерисовывается.

Page 25: Как анимировать тысячи объектов на карте и не подвесить браузер

25

БЫСТРЕЕ!!!

Page 26: Как анимировать тысячи объектов на карте и не подвесить браузер

26

Проблема масштабирования

● Смена масштаба

● Пересчет положений объектов

● Перерисовка

Page 27: Как анимировать тысячи объектов на карте и не подвесить браузер

27

Вообще-то никакой проблемынет

Page 28: Как анимировать тысячи объектов на карте и не подвесить браузер

28

БЫСТРЕЕ!!!!!!!!!!!!!!!!!!!!!!!!!!

Перерисовка слоя статики для каждой из Nмашин. Тормоза.

Page 29: Как анимировать тысячи объектов на карте и не подвесить браузер

29

БЫСТРЕЕ!!!!!!!!!!!!!!!!!!!!!!!!!!

Перерисовка статического слоя стоитдорого, так как выполняется НЕ быстро

Page 30: Как анимировать тысячи объектов на карте и не подвесить браузер

30

БЫСТРЕЕ!!!!!!!!!!!!!!!!!!!!!!!!!!

Перерисовка слоя статики для очереди изN машин. Быстрее чуть менее чем в N раз.

Page 31: Как анимировать тысячи объектов на карте и не подвесить браузер

31

Копим анимации

● Очередь копится в среднем 4 секунды

● Нет цели показать секунда в секундуположение транспортного средства

● Актуализация положений раз в 4 секундадостаточна для кейса

Page 32: Как анимировать тысячи объектов на карте и не подвесить браузер

32

Метки

Page 33: Как анимировать тысячи объектов на карте и не подвесить браузер

33

Транспортные средства

Page 34: Как анимировать тысячи объектов на карте и не подвесить браузер

34

Исходный код

Доступен по адресу

https://github.com/pokatomnik/layeredMap

Page 35: Как анимировать тысячи объектов на карте и не подвесить браузер

35

Спасибо за внимание

Ахмедьзянов Данильян

ЭТТО

[email protected]

github.com/pokatomnik