Уголок разработчиков
Представляем кампанию по очистке клиента

В этом году мы собираемся улучшить инфраструктуру клиента, чтобы починить его.

Уголок разработчиковАвторыRiot Cactopus, Riot Sparango, Riot Id, Riot A Huevo
  • Скопировано в буфер обмена

Суть вкратце: в ближайшие шесть месяцев (или около того) мы внесем ряд изменений и улучшений в бэкенд-инфраструктуру клиента Лиги. Чтобы вы могли отслеживать этот процесс, мы расскажем о целях улучшения двух ключевых показателей производительности клиента: времени начальной загрузки (период до появления главной страницы клиента) и времени подтверждения выбора чемпиона. Работая над этими показателями, мы будем попутно исправлять недочеты и ошибки, в том числе критические. Короче, наша цель – починить клиент.

"Riot, когда вы уже почините клиент?"

Многих из вас интересует этот вопрос. Клиент сейчас действительно не в лучшей форме. В нем полно ошибок, он медленно работает (особенно во время выбора чемпионов) и обладает целым ворохом других проблем: утечки памяти, вылеты, зависания и т. д. В прошлом мы уже пытались улучшить клиент, однако проблемы никуда не делись.

Поэтому мы решили изменить подход.

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

Во-первых, давайте поговорим о недавних изменениях, направленных на повышение производительности, и обозначим числа, от которых будем отталкиваться на пути к будущим улучшениям.

КЛИЕНТ В ЧИСЛАХ

В конце прошлого года мы добавили в клиент инструменты, которые позволяют отслеживать базовые индикаторы производительности – например, сколько времени требуется клиенту для того, чтобы запуститься и стать полностью функциональным (будем называть это "начальной загрузкой").

Мы хотим, чтобы начальная загрузка занимала менее 15 секунд даже у игроков со слабыми ПК. Сейчас же у некоторых пользователей этот показатель выше в три, а то и в четыре раза.

Еще один важный показатель, который мы отслеживаем, – время подтверждения выбора чемпиона. Это время, которое проходит с момента нажатия кнопки подтверждения до обработки этого события клиентом. На графике ниже показано среднее время отклика при подтверждении выбора чемпиона в версиях 9.22 (оранжевая линия) и 10.2 (синяя линия). Время указано в миллисекундах.

Client_Cleanup_Blog_1_Charts.png

На графике выше видно, насколько может отличаться время отклика во время выбора чемпиона у разных игроков. Конечно, производительность клиента зависит от мощности вашего компьютера. Скажем, если на подтверждение у вас уходит 200 мс, то ваш ПК относится к 10-му процентилю – то есть ваше время отклика меньше, чем у 90% игроков. А если подтверждение занимает 800 мс, вас можно отнести к 90-му процентилю – это значит, что по этому показателю ваш клиент медленнее, чем у 90% других игроков.

Как видите, в версии 10.2 время подтверждения выбора чемпиона значительно сократилось по сравнению с версией 9.22. Главная причина – перенос клиента на новую версию Chromium в обновлении 9.23. Это дало серьезный прирост, однако у многих из вас клиент по-прежнему работает слишком медленно.

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

Client_Cleanup_Blog_2_Charts.png

Синяя линия – это 50-й процентиль, то есть "медианный" игрок. То, что время отклика для медианного игрока стало заметно меньше, – это, конечно, здорово. Однако даже в начале 2020 года время подтверждения выбора чемпиона здесь составляет около 300 мс. Не худший результат, но задержка все равно получается ощутимой.

У игроков 70-го процентиля (зеленая линия) также наблюдаются значительные улучшения, однако время отклика все равно держится на отметке 450 мс, а это почти полсекунды задержки. Откровенно говоря, более-менее приличный компьютер должен выдавать результат гораздо лучше.

Последняя линия, оранжевая, – 90-й процентиль во всей своей чудовищной красе. С одной стороны, все логично – время отклика у таких игроков должно быть больше, чем у других. Но 800 мс – это перебор, а именно с этим им приходится мириться даже после обновления Chromium.

Итак, пришло время обсудить, что мы будем делать дальше.

ДАЛЬНЕЙШИЕ ПРИОРИТЕТЫ

Мы поставили перед собой две долгосрочные цели, которые будут приоритетными в работе по улучшению производительности клиента:

  1. Мы хотим, чтобы время начальной загрузки составляло не более 15 секунд даже у игроков 90-го процентиля. Это примерно в три-четыре раза быстрее, чем сейчас.
  2. Мы хотим, чтобы время отклика при подтверждении выбора чемпиона у игроков 90-го процентиля составляло около 100 мс. Это примерно в восемь раз быстрее, чем сейчас.

Мы знаем, что вы подумали. А как же ошибки? Как же вылеты и утечки памяти?

Зачем ставить в приоритет именно эти два показателя? Все просто: работая над временем начальной загрузки и подтверждения выбора чемпиона, мы будем чистить и перерабатывать фундаментальные элементы архитектуры клиента. Мы рассчитываем, что на пути к этим целям сможем также исправлять ошибки, устранять утечки памяти и разбираться с вылетами.

В рамках этого процесса мы собираемся исправить "черный экран" во время выбора чемпионов, ошибки сохранения страниц рун и другие подобные проблемы. Но сразу предупредим, что результата придется подождать. Сейчас у нас есть примерный план на следующие шесть месяцев, в течение которых мы надеемся добиться заметного прогресса, но достижение долгосрочных целей, вероятно, займет больше времени.

Это только цели – вполне возможно, что нам не удастся их достичь. Мы рассказываем о них, потому что хотим быть максимально открытыми и честными, чтобы вернуть вам веру в клиент.

Сейчас вы наверняка хотите спросить: "Как именно мы собираемся всего этого достичь?"

ЧТО МЫ БУДЕМ ДЕЛАТЬ

Пока что мы определили две крупные проблемы архитектуры, из-за которых начальная загрузка такая долгая. Первое – архитектура плагинов, которая позволяет нам разбивать код клиента на части. Чем больше функционала мы добавляли в клиент, тем сильнее распухала эта архитектура. Второе – неоптимальное использование Javascript-фреймворка (под названием Ember), на котором построен наш интерфейс.

Сейчас клиент использует слишком много плагинов и приложений Ember. Во время начального запуска загружается 41 отдельный плагин и 16 приложений, и каждый из этих элементов увеличивает общее время загрузки на 100-800 мс. Это не круто.

Мы планируем объединить все эти плагины и приложения, значительно сократив их количество (и в теории повысив эффективность). В первую очередь мы сосредоточимся на тех элементах, которые загружаются во время начального запуска, так как считаем, что это даст наибольший прирост производительности всему клиенту.

СТАДИЯ 1: НАЧАЛЬНАЯ ЗАГРУЗКА

Сегодня для многих из вас начальная загрузка занимает вплоть до 40 секунд. Если вы один из таких игроков, то наверняка знаете, что это медленный и раздражающий процесс. А если клиент вылетает, повторная загрузка радует еще меньше.

Множество функций клиента – вроде уведомлений, списка друзей и вкладки "Коллекция" – работают с помощью плагинов и приложений, которые загружаются во время начального запуска. Поэтому хотя наша основная долгосрочная цель – уменьшить время начальной загрузки у игроков 90-го процентиля до 15 секунд, мы считаем, что в процессе нам удастся исправить множество ошибок и проблем, связанных с неэффективным использованием ресурсов, по всему клиенту.

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

СТАДИЯ 2: ВЫБОР ЧЕМПИОНОВ

В процессе выбора чемпионов задействовано множество дополнительных плагинов и приложений Ember. По правде говоря, почти все, что вы делаете во время этой стадии, создает новые приложения. Обмен чемпионами запускает два приложения. Смена заклинания призывателя – столько же.

Чем дольше вы играете в Лигу за одну сессию, тем больше приложений нагромождаются друг на друга, из-за чего отзывчивость клиента стремительно падает. Проблему усугубляет то, что большинство действий, которые вы совершаете во время выбора чемпиона, обрабатываются еще и на наших серверах, из-за чего к времени выполнения каждого из них прибавляется сетевая задержка.

Большинство проблем выбора чемпионов сводятся к принципу, по которому наши серверные системы управляют данными. Текущая архитектура выбора чемпионов позволяет пропускать через наши системы множество важных данных. Например, если Riot решит отключить чемпиона в ранговых играх, он почти мгновенно станет недоступен для всех игроков – даже для тех, кто на момент отключения находится на этапе выбора чемпиона.

Это очень мощная система, но она расходует много ресурсов, а в ее текущей структуре слишком много ненужных преград и узких мест, поэтому зачастую даже при небольшом изменении обновляется огромное количество данных. В результате производительность клиента сильно снижается.

Чтобы исправить это, нам нужно на фундаментальном уровне изменить принцип, по которому работает серверная инфраструктура выбора чемпионов. Мы хотим переработать процессы обмена данными между сервером и клиентом во время стадии выбора, а на это уйдет время.

У нас есть и другие амбициозные планы, а также долгосрочные цели, которые сделают выбор чемпионов еще более эффективным, – например, объединение всего клиента в единое приложение Ember без плагинов вообще. Но пока что мы хотим просто внести достаточно изменений, чтобы повысить производительность клиента до обозначенных выше показателей.

Мы не знаем, насколько сможем приблизиться к оптимальным показателям за эти шесть месяцев. Но мы уверены, что достигнем ощутимого прогресса и определимся с дальнейшими шагами.

СЛЕДУЮЩИЕ ШАГИ

Каждые несколько месяцев мы собираемся публиковать отчеты о проделанной работе, в которых будем приводить конкретные цифры, связанные с производительностью, а также возможные изменения в намеченном графике работы.

Пожелайте нам удачи! И спасибо, что продолжаете играть в Лигу. До скорого!



  • Скопировано в буфер обмена