SlideShare a Scribd company logo
Производительность
WebGL приложений
Кирилл Дмитренко
Яндекс
План
•  Что такое WebGL?
•  Измерение
производительности
•  Оптимизации
WebGL?
WebGL – API к GPU
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Приложение
Приложение
Буферы
Приложение
Буферы Текстуры
Приложение
Буферы
Шейдеры
Текстуры
Приложение
Буферы
Шейдеры
Текстуры
WebGL контекст
Измерение
FPS
Профайлер
Асинхронность
•  Некоторые вызовы
асинхронные.
Асинхронность
•  Некоторые вызовы
асинхронные.
•  Некоторые – синхронные.
Асинхронность
•  Некоторые вызовы
асинхронные.
•  Некоторые – синхронные.
•  Некоторые
синхронизируют весь
контекст.
EXT_disjoint_timer_query
+ Измеряет время
исполнения на GPU.
EXT_disjoint_timer_query
+ Измеряет время
исполнения на GPU.
+ Асинхронно.
EXT_disjoint_timer_query
+ Измеряет время
исполнения на GPU.
+ Асинхронно.
-  Надо писать код.
EXT_disjoint_timer_query
•  Время исполнения
группы вызовов.
EXT_disjoint_timer_query
•  Время исполнения
группы вызовов.
•  Временные метки.
Demo time!
Измерение: выводы
•  FPS как качественная
характеристика.
Измерение: выводы
•  FPS как качественная
характеристика.
•  Профайлер для поиска
узких мест на CPU.
Измерение: выводы
•  FPS как качественная
характеристика.
•  Профайлер для поиска
узких мест на CPU.
•  EXT_disjoint_timer_query
– на GPU.
Оптимизации
Работа с состоянием
•  Не вызываем get* и read*.
Работа с состоянием
•  Не вызываем get* и read*.
•  getError() – только в
разработке.
Работа с состоянием
•  Не вызываем get* и read*.
•  getError() – только в
разработке.
•  Минимизировать
переключения.
foreach (framebuffer)
foreach (state)
foreach (program)
foreach (texture set)
foreach (vertex buffer)
foreach (object)
draw();
Less calls, more work!
•  Несколько объектов в
один буфер.
Less calls, more work!
•  Несколько объектов в
один буфер.
•  Текстуры – в атлас.
Less calls, more work!
•  Несколько объектов в
один буфер.
•  Текстуры – в атлас.
•  Instancing.
Demo time!
В панорамах
•  Получили бесплатно ☺
В панорамах
•  Получили бесплатно ☺
•  Instancing для маркеров.
В панорамах
•  Получили бесплатно ☺
•  Instancing для маркеров.
•  Вытеснение невидимых
секторов панорамы.
В панорамах
В панорамах
В панорамах
В панорамах
Overdraw
•  Считаем пиксели по
несколько раз.
Overdraw
•  Исключить из кадра
невидимые объекты.
Overdraw
•  Исключить из кадра
невидимые объекты.
•  Отсортировать объекты
по Z.
Overdraw
•  Исключить из кадра
невидимые объекты.
•  Отсортировать объекты
по Z.
•  Depth pre-pass.
Demo time!
В панорамах
В панорамах
В панорамах
В панорамах
В панорамах
В панорамах
В панорамах
В панорамах
В панорамах
В панорамах
В панорамах
В панорамах
Код вокруг
•  DOM.
•  Загрузка ресурсов.
•  События UI.
Код вокруг
•  Разбить на небольшие
части.
Код вокруг
•  Разбить на небольшие
части.
•  Планировщик.
В панорамах
•  Загрузка видимых тайлов.
В панорамах
•  Загрузка видимых тайлов.
•  Вытеснение невидимых
частей панорамы.
В панорамах
•  Загрузка видимых тайлов.
•  Вытеснение невидимых
частей панорамы.
•  События API.
Оптимизации: выводы
•  Аккуратно работаем с
состоянием.
Оптимизации: выводы
•  Аккуратно работаем с
состоянием.
•  Меньше вызовов draw*.
Оптимизации: выводы
•  Аккуратно работаем с
состоянием.
•  Меньше вызовов draw*.
•  Избегаем overdraw.
Оптимизации: выводы
•  Аккуратно работаем с
состоянием.
•  Меньше вызовов draw*.
•  Избегаем overdraw.
•  Планировщик.
Спасибо!
Кирилл Дмитренко
Разработчик интерфейсов
@dmikis
facebook.com/dmikis
dmikis@yandex-team.ru

More Related Content

PDF
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
PPTX
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
PPTX
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
PPTX
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
PDF
My talk at Highload++ 2015
PDF
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
PPTX
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
PPTX
Как собирать gps треки раз в секунду, экономя траффик
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
My talk at Highload++ 2015
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Как собирать gps треки раз в секунду, экономя траффик

What's hot (20)

PPTX
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
PPTX
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
PDF
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
PPTX
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
PDF
Где живут Ваши объявления / Тюрин Михаил (Avito)
PDF
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
PPTX
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
PDF
Ровная балансировка нагрузки на фронтенд-кластере
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PDF
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
PPTX
Антон Турецкий
PDF
Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошни...
PDF
Javascript-фреймворки:
 должен остаться только один
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PDF
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Где живут Ваши объявления / Тюрин Михаил (Avito)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Ровная балансировка нагрузки на фронтенд-кластере
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Антон Турецкий
Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошни...
Javascript-фреймворки:
 должен остаться только один
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
Ad

Viewers also liked (20)

PPTX
Как устроен поиск / Андрей Аксенов (Sphinx)
PDF
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PPTX
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
PDF
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
PPTX
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
PDF
WebGL. Что за технология, почему стоит изучать и как начать ей пользоваться, ...
PDF
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
PPTX
Ускорение показа превью изображений в Яндекс.Диске / Сергей Нечаев (Яндекс)
PPTX
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
PDF
Эволюция клиентской разработки от веба ко всеобщей мобилизации или mobile-fir...
PPTX
Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)
PPTX
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
PPTX
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
PPTX
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
PPTX
Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Как мы сделали ровную балансировку нагрузки на фронтенд-кластере / Насретдино...
PDF
Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексе...
Как устроен поиск / Андрей Аксенов (Sphinx)
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Unity: WebGL и IL2CPP — будущее скриптинга в Unity»
WebGL. Что за технология, почему стоит изучать и как начать ей пользоваться, ...
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Ускорение показа превью изображений в Яндекс.Диске / Сергей Нечаев (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Эволюция клиентской разработки от веба ко всеобщей мобилизации или mobile-fir...
Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)
Ускоряем исследования с помощью конкурсов как их готовить и выигрывать / Иван...
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Ужимай и властвуй алгоритмы компрессии в базах данных / Петр Зайцев (Percona)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Как мы сделали ровную балансировку нагрузки на фронтенд-кластере / Насретдино...
Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексе...
Ad

Similar to Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс) (20)

PDF
Interactive Lab: Разработка Flash игр на Unity3D
PPTX
Unity_ Handmade graphics optimizations by Roman Chehowski
PDF
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
PDF
TК°Conf. Организация разработки Frontend. Виталий Слободин.
PDF
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
PDF
Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)
PPT
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
PPT
Git in Sky presentation @ HighLoad++ 2013
PDF
Сергей Житинский, Александр Чистяков (Git in Sky)
PDF
Иван Карев — Клиентская оптимизация
PPTX
Playing in the browser
PPTX
Грязная автоматизация
PPTX
Оптимизация производительности нагруженных веб-систем на Java
PPT
Архитектура современного 3 d движка: Разработка Xenus: Точка кипения
PDF
Иван Карев — Клиентская оптимизация
PDF
Mihail Korepanov
PDF
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
PPTX
(Не) преждевременная оптимизация проекта на Unreal Engine 4 / Владимир Алямки...
PDF
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
PDF
JavaFX 2.0 overview
Interactive Lab: Разработка Flash игр на Unity3D
Unity_ Handmade graphics optimizations by Roman Chehowski
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
TК°Conf. Организация разработки Frontend. Виталий Слободин.
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
Git in Sky presentation @ HighLoad++ 2013
Сергей Житинский, Александр Чистяков (Git in Sky)
Иван Карев — Клиентская оптимизация
Playing in the browser
Грязная автоматизация
Оптимизация производительности нагруженных веб-систем на Java
Архитектура современного 3 d движка: Разработка Xenus: Точка кипения
Иван Карев — Клиентская оптимизация
Mihail Korepanov
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
(Не) преждевременная оптимизация проекта на Unreal Engine 4 / Владимир Алямки...
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
JavaFX 2.0 overview

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
PDF
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
PPTX
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Java и Linux — особенности эксплуатации / Алексей Рагозин (Дойче Банк)

Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)