В этом году мы собираемся улучшить инфраструктуру клиента, чтобы починить его.
Суть вкратце: в ближайшие шесть месяцев (или около того) мы внесем ряд изменений и улучшений в бэкенд-инфраструктуру клиента Лиги. Чтобы вы могли отслеживать этот процесс, мы расскажем о целях улучшения двух ключевых показателей производительности клиента: времени начальной загрузки (период до появления главной страницы клиента) и времени подтверждения выбора чемпиона. Работая над этими показателями, мы будем попутно исправлять недочеты и ошибки, в том числе критические. Короче, наша цель – починить клиент.
"Riot, когда вы уже почините клиент?"
Многих из вас интересует этот вопрос. Клиент сейчас действительно не в лучшей форме. В нем полно ошибок, он медленно работает (особенно во время выбора чемпионов) и обладает целым ворохом других проблем: утечки памяти, вылеты, зависания и т. д. В прошлом мы уже пытались улучшить клиент, однако проблемы никуда не делись.
Поэтому мы решили изменить подход.
Сегодня мы не будем лить воду о туманных планах, а четко и ясно расскажем о конкретных целях улучшения производительности и о том, какие изменения мы намерены внести в ближайшие шесть месяцев.
Во-первых, давайте поговорим о недавних изменениях, направленных на повышение производительности, и обозначим числа, от которых будем отталкиваться на пути к будущим улучшениям.
В конце прошлого года мы добавили в клиент инструменты, которые позволяют отслеживать базовые индикаторы производительности – например, сколько времени требуется клиенту для того, чтобы запуститься и стать полностью функциональным (будем называть это "начальной загрузкой").
Мы хотим, чтобы начальная загрузка занимала менее 15 секунд даже у игроков со слабыми ПК. Сейчас же у некоторых пользователей этот показатель выше в три, а то и в четыре раза.
Еще один важный показатель, который мы отслеживаем, – время подтверждения выбора чемпиона. Это время, которое проходит с момента нажатия кнопки подтверждения до обработки этого события клиентом. На графике ниже показано среднее время отклика при подтверждении выбора чемпиона в версиях 9.22 (оранжевая линия) и 10.2 (синяя линия). Время указано в миллисекундах.
На графике выше видно, насколько может отличаться время отклика во время выбора чемпиона у разных игроков. Конечно, производительность клиента зависит от мощности вашего компьютера. Скажем, если на подтверждение у вас уходит 200 мс, то ваш ПК относится к 10-му процентилю – то есть ваше время отклика меньше, чем у 90% игроков. А если подтверждение занимает 800 мс, вас можно отнести к 90-му процентилю – это значит, что по этому показателю ваш клиент медленнее, чем у 90% других игроков.
Как видите, в версии 10.2 время подтверждения выбора чемпиона значительно сократилось по сравнению с версией 9.22. Главная причина – перенос клиента на новую версию Chromium в обновлении 9.23. Это дало серьезный прирост, однако у многих из вас клиент по-прежнему работает слишком медленно.
Чтобы понять, что мы имеем в виду, посмотрите на более подробный график времени отклика при подтверждении выбора чемпиона у этих групп игроков.
Синяя линия – это 50-й процентиль, то есть "медианный" игрок. То, что время отклика для медианного игрока стало заметно меньше, – это, конечно, здорово. Однако даже в начале 2020 года время подтверждения выбора чемпиона здесь составляет около 300 мс. Не худший результат, но задержка все равно получается ощутимой.
У игроков 70-го процентиля (зеленая линия) также наблюдаются значительные улучшения, однако время отклика все равно держится на отметке 450 мс, а это почти полсекунды задержки. Откровенно говоря, более-менее приличный компьютер должен выдавать результат гораздо лучше.
Последняя линия, оранжевая, – 90-й процентиль во всей своей чудовищной красе. С одной стороны, все логично – время отклика у таких игроков должно быть больше, чем у других. Но 800 мс – это перебор, а именно с этим им приходится мириться даже после обновления Chromium.
Итак, пришло время обсудить, что мы будем делать дальше.
Мы поставили перед собой две долгосрочные цели, которые будут приоритетными в работе по улучшению производительности клиента:
Мы знаем, что вы подумали. А как же ошибки? Как же вылеты и утечки памяти?
Зачем ставить в приоритет именно эти два показателя? Все просто: работая над временем начальной загрузки и подтверждения выбора чемпиона, мы будем чистить и перерабатывать фундаментальные элементы архитектуры клиента. Мы рассчитываем, что на пути к этим целям сможем также исправлять ошибки, устранять утечки памяти и разбираться с вылетами.
В рамках этого процесса мы собираемся исправить "черный экран" во время выбора чемпионов, ошибки сохранения страниц рун и другие подобные проблемы. Но сразу предупредим, что результата придется подождать. Сейчас у нас есть примерный план на следующие шесть месяцев, в течение которых мы надеемся добиться заметного прогресса, но достижение долгосрочных целей, вероятно, займет больше времени.
Это только цели – вполне возможно, что нам не удастся их достичь. Мы рассказываем о них, потому что хотим быть максимально открытыми и честными, чтобы вернуть вам веру в клиент.
Сейчас вы наверняка хотите спросить: "Как именно мы собираемся всего этого достичь?"
Пока что мы определили две крупные проблемы архитектуры, из-за которых начальная загрузка такая долгая. Первое – архитектура плагинов, которая позволяет нам разбивать код клиента на части. Чем больше функционала мы добавляли в клиент, тем сильнее распухала эта архитектура. Второе – неоптимальное использование Javascript-фреймворка (под названием Ember), на котором построен наш интерфейс.
Сейчас клиент использует слишком много плагинов и приложений Ember. Во время начального запуска загружается 41 отдельный плагин и 16 приложений, и каждый из этих элементов увеличивает общее время загрузки на 100-800 мс. Это не круто.
Мы планируем объединить все эти плагины и приложения, значительно сократив их количество (и в теории повысив эффективность). В первую очередь мы сосредоточимся на тех элементах, которые загружаются во время начального запуска, так как считаем, что это даст наибольший прирост производительности всему клиенту.
Сегодня для многих из вас начальная загрузка занимает вплоть до 40 секунд. Если вы один из таких игроков, то наверняка знаете, что это медленный и раздражающий процесс. А если клиент вылетает, повторная загрузка радует еще меньше.
Множество функций клиента – вроде уведомлений, списка друзей и вкладки "Коллекция" – работают с помощью плагинов и приложений, которые загружаются во время начального запуска. Поэтому хотя наша основная долгосрочная цель – уменьшить время начальной загрузки у игроков 90-го процентиля до 15 секунд, мы считаем, что в процессе нам удастся исправить множество ошибок и проблем, связанных с неэффективным использованием ресурсов, по всему клиенту.
Спустя несколько месяцев работы над начальной загрузкой мы оценим, насколько приблизились к поставленным целям, а затем – скорее всего, ближе к концу весны – сосредоточимся на выборе чемпионов.
В процессе выбора чемпионов задействовано множество дополнительных плагинов и приложений Ember. По правде говоря, почти все, что вы делаете во время этой стадии, создает новые приложения. Обмен чемпионами запускает два приложения. Смена заклинания призывателя – столько же.
Чем дольше вы играете в Лигу за одну сессию, тем больше приложений нагромождаются друг на друга, из-за чего отзывчивость клиента стремительно падает. Проблему усугубляет то, что большинство действий, которые вы совершаете во время выбора чемпиона, обрабатываются еще и на наших серверах, из-за чего к времени выполнения каждого из них прибавляется сетевая задержка.
Большинство проблем выбора чемпионов сводятся к принципу, по которому наши серверные системы управляют данными. Текущая архитектура выбора чемпионов позволяет пропускать через наши системы множество важных данных. Например, если Riot решит отключить чемпиона в ранговых играх, он почти мгновенно станет недоступен для всех игроков – даже для тех, кто на момент отключения находится на этапе выбора чемпиона.
Это очень мощная система, но она расходует много ресурсов, а в ее текущей структуре слишком много ненужных преград и узких мест, поэтому зачастую даже при небольшом изменении обновляется огромное количество данных. В результате производительность клиента сильно снижается.
Чтобы исправить это, нам нужно на фундаментальном уровне изменить принцип, по которому работает серверная инфраструктура выбора чемпионов. Мы хотим переработать процессы обмена данными между сервером и клиентом во время стадии выбора, а на это уйдет время.
У нас есть и другие амбициозные планы, а также долгосрочные цели, которые сделают выбор чемпионов еще более эффективным, – например, объединение всего клиента в единое приложение Ember без плагинов вообще. Но пока что мы хотим просто внести достаточно изменений, чтобы повысить производительность клиента до обозначенных выше показателей.
Мы не знаем, насколько сможем приблизиться к оптимальным показателям за эти шесть месяцев. Но мы уверены, что достигнем ощутимого прогресса и определимся с дальнейшими шагами.
Каждые несколько месяцев мы собираемся публиковать отчеты о проделанной работе, в которых будем приводить конкретные цифры, связанные с производительностью, а также возможные изменения в намеченном графике работы.
Пожелайте нам удачи! И спасибо, что продолжаете играть в Лигу. До скорого!