Представляем кампанию по очистке клиента
Суть вкратце: в ближайшие шесть месяцев (или около того) мы внесем ряд изменений и улучшений в бэкенд-инфраструктуру клиента Лиги. Чтобы вы могли отслеживать этот процесс, мы расскажем о целях улучшения двух ключевых показателей производительности клиента: времени начальной загрузки (период до появления главной страницы клиента) и времени подтверждения выбора чемпиона. Работая над этими показателями, мы будем попутно исправлять недочеты и ошибки, в том числе критические. Короче, наша цель – починить клиент.
"Riot, когда вы уже почините клиент?"
Многих из вас интересует этот вопрос. Клиент сейчас действительно не в лучшей форме. В нем полно ошибок, он медленно работает (особенно во время выбора чемпионов) и обладает целым ворохом других проблем: утечки памяти, вылеты, зависания и т. д. В прошлом мы уже пытались улучшить клиент, однако проблемы никуда не делись.
Поэтому мы решили изменить подход.
Сегодня мы не будем лить воду о туманных планах, а четко и ясно расскажем о конкретных целях улучшения производительности и о том, какие изменения мы намерены внести в ближайшие шесть месяцев.
Во-первых, давайте поговорим о недавних изменениях, направленных на повышение производительности, и обозначим числа, от которых будем отталкиваться на пути к будущим улучшениям.
КЛИЕНТ В ЧИСЛАХ
В конце прошлого года мы добавили в клиент инструменты, которые позволяют отслеживать базовые индикаторы производительности – например, сколько времени требуется клиенту для того, чтобы запуститься и стать полностью функциональным (будем называть это "начальной загрузкой").
Мы хотим, чтобы начальная загрузка занимала менее 15 секунд даже у игроков со слабыми ПК. Сейчас же у некоторых пользователей этот показатель выше в три, а то и в четыре раза.
Еще один важный показатель, который мы отслеживаем, – время подтверждения выбора чемпиона. Это время, которое проходит с момента нажатия кнопки подтверждения до обработки этого события клиентом. На графике ниже показано среднее время отклика при подтверждении выбора чемпиона в версиях 9.22 (оранжевая линия) и 10.2 (синяя линия). Время указано в миллисекундах.
![Client_Cleanup_Blog_1_Charts.png](https://cmsassets.rgpub.io/sanity/images/dsfx7636/news_live/bc94e133a53b569ea4fb6a1624e4a2d848a5f1a4-1362x780.png)
На графике выше видно, насколько может отличаться время отклика во время выбора чемпиона у разных игроков. Конечно, производительность клиента зависит от мощности вашего компьютера. Скажем, если на подтверждение у вас уходит 200 мс, то ваш ПК относится к 10-му процентилю – то есть ваше время отклика меньше, чем у 90% игроков. А если подтверждение занимает 800 мс, вас можно отнести к 90-му процентилю – это значит, что по этому показателю ваш клиент медленнее, чем у 90% других игроков.
Как видите, в версии 10.2 время подтверждения выбора чемпиона значительно сократилось по сравнению с версией 9.22. Главная причина – перенос клиента на новую версию Chromium в обновлении 9.23. Это дало серьезный прирост, однако у многих из вас клиент по-прежнему работает слишком медленно.
Чтобы понять, что мы имеем в виду, посмотрите на более подробный график времени отклика при подтверждении выбора чемпиона у этих групп игроков.
![Client_Cleanup_Blog_2_Charts.png](https://cmsassets.rgpub.io/sanity/images/dsfx7636/news_live/69a2533da175bb9d43b9c6eb45354487f9bd6a5e-1362x780.png)
Синяя линия – это 50-й процентиль, то есть "медианный" игрок. То, что время отклика для медианного игрока стало заметно меньше, – это, конечно, здорово. Однако даже в начале 2020 года время подтверждения выбора чемпиона здесь составляет около 300 мс. Не худший результат, но задержка все равно получается ощутимой.
У игроков 70-го процентиля (зеленая линия) также наблюдаются значительные улучшения, однако время отклика все равно держится на отметке 450 мс, а это почти полсекунды задержки. Откровенно говоря, более-менее приличный компьютер должен выдавать результат гораздо лучше.
Последняя линия, оранжевая, – 90-й процентиль во всей своей чудовищной красе. С одной стороны, все логично – время отклика у таких игроков должно быть больше, чем у других. Но 800 мс – это перебор, а именно с этим им приходится мириться даже после обновления Chromium.
Итак, пришло время обсудить, что мы будем делать дальше.
ДАЛЬНЕЙШИЕ ПРИОРИТЕТЫ
Мы поставили перед собой две долгосрочные цели, которые будут приоритетными в работе по улучшению производительности клиента:
- Мы хотим, чтобы время начальной загрузки составляло не более 15 секунд даже у игроков 90-го процентиля. Это примерно в три-четыре раза быстрее, чем сейчас.
- Мы хотим, чтобы время отклика при подтверждении выбора чемпиона у игроков 90-го процентиля составляло около 100 мс. Это примерно в восемь раз быстрее, чем сейчас.
Мы знаем, что вы подумали. А как же ошибки? Как же вылеты и утечки памяти?
Зачем ставить в приоритет именно эти два показателя? Все просто: работая над временем начальной загрузки и подтверждения выбора чемпиона, мы будем чистить и перерабатывать фундаментальные элементы архитектуры клиента. Мы рассчитываем, что на пути к этим целям сможем также исправлять ошибки, устранять утечки памяти и разбираться с вылетами.
В рамках этого процесса мы собираемся исправить "черный экран" во время выбора чемпионов, ошибки сохранения страниц рун и другие подобные проблемы. Но сразу предупредим, что результата придется подождать. Сейчас у нас есть примерный план на следующие шесть месяцев, в течение которых мы надеемся добиться заметного прогресса, но достижение долгосрочных целей, вероятно, займет больше времени.
Это только цели – вполне возможно, что нам не удастся их достичь. Мы рассказываем о них, потому что хотим быть максимально открытыми и честными, чтобы вернуть вам веру в клиент.
Сейчас вы наверняка хотите спросить: "Как именно мы собираемся всего этого достичь?"
ЧТО МЫ БУДЕМ ДЕЛАТЬ
Пока что мы определили две крупные проблемы архитектуры, из-за которых начальная загрузка такая долгая. Первое – архитектура плагинов, которая позволяет нам разбивать код клиента на части. Чем больше функционала мы добавляли в клиент, тем сильнее распухала эта архитектура. Второе – неоптимальное использование Javascript-фреймворка (под названием Ember), на котором построен наш интерфейс.
Сейчас клиент использует слишком много плагинов и приложений Ember. Во время начального запуска загружается 41 отдельный плагин и 16 приложений, и каждый из этих элементов увеличивает общее время загрузки на 100-800 мс. Это не круто.
Мы планируем объединить все эти плагины и приложения, значительно сократив их количество (и в теории повысив эффективность). В первую очередь мы сосредоточимся на тех элементах, которые загружаются во время начального запуска, так как считаем, что это даст наибольший прирост производительности всему клиенту.
СТАДИЯ 1: НАЧАЛЬНАЯ ЗАГРУЗКА
Сегодня для многих из вас начальная загрузка занимает вплоть до 40 секунд. Если вы один из таких игроков, то наверняка знаете, что это медленный и раздражающий процесс. А если клиент вылетает, повторная загрузка радует еще меньше.
Множество функций клиента – вроде уведомлений, списка друзей и вкладки "Коллекция" – работают с помощью плагинов и приложений, которые загружаются во время начального запуска. Поэтому хотя наша основная долгосрочная цель – уменьшить время начальной загрузки у игроков 90-го процентиля до 15 секунд, мы считаем, что в процессе нам удастся исправить множество ошибок и проблем, связанных с неэффективным использованием ресурсов, по всему клиенту.
Спустя несколько месяцев работы над начальной загрузкой мы оценим, насколько приблизились к поставленным целям, а затем – скорее всего, ближе к концу весны – сосредоточимся на выборе чемпионов.
СТАДИЯ 2: ВЫБОР ЧЕМПИОНОВ
В процессе выбора чемпионов задействовано множество дополнительных плагинов и приложений Ember. По правде говоря, почти все, что вы делаете во время этой стадии, создает новые приложения. Обмен чемпионами запускает два приложения. Смена заклинания призывателя – столько же.
Чем дольше вы играете в Лигу за одну сессию, тем больше приложений нагромождаются друг на друга, из-за чего отзывчивость клиента стремительно падает. Проблему усугубляет то, что большинство действий, которые вы совершаете во время выбора чемпиона, обрабатываются еще и на наших серверах, из-за чего к времени выполнения каждого из них прибавляется сетевая задержка.
Большинство проблем выбора чемпионов сводятся к принципу, по которому наши серверные системы управляют данными. Текущая архитектура выбора чемпионов позволяет пропускать через наши системы множество важных данных. Например, если Riot решит отключить чемпиона в ранговых играх, он почти мгновенно станет недоступен для всех игроков – даже для тех, кто на момент отключения находится на этапе выбора чемпиона.
Это очень мощная система, но она расходует много ресурсов, а в ее текущей структуре слишком много ненужных преград и узких мест, поэтому зачастую даже при небольшом изменении обновляется огромное количество данных. В результате производительность клиента сильно снижается.
Чтобы исправить это, нам нужно на фундаментальном уровне изменить принцип, по которому работает серверная инфраструктура выбора чемпионов. Мы хотим переработать процессы обмена данными между сервером и клиентом во время стадии выбора, а на это уйдет время.
У нас есть и другие амбициозные планы, а также долгосрочные цели, которые сделают выбор чемпионов еще более эффективным, – например, объединение всего клиента в единое приложение Ember без плагинов вообще. Но пока что мы хотим просто внести достаточно изменений, чтобы повысить производительность клиента до обозначенных выше показателей.
Мы не знаем, насколько сможем приблизиться к оптимальным показателям за эти шесть месяцев. Но мы уверены, что достигнем ощутимого прогресса и определимся с дальнейшими шагами.
СЛЕДУЮЩИЕ ШАГИ
Каждые несколько месяцев мы собираемся публиковать отчеты о проделанной работе, в которых будем приводить конкретные цифры, связанные с производительностью, а также возможные изменения в намеченном графике работы.
Пожелайте нам удачи! И спасибо, что продолжаете играть в Лигу. До скорого!