ОЧИСТКА КЛИЕНТА: обновление CEF завершено
Мы обещали периодически рассказывать, как улучшаем производительность и стабильность клиента Лиги. Перед вами девятая статья цикла. Первую можно прочитать здесь, вторую – здесь, третью – здесь, четвертую – здесь, пятую – здесь, шестую – здесь, седьмую – здесь, а восьмую – здесь.
Суть вкратце: в обновлении 11.17 мы перевели CEF (Chromium Embedded Framework) – веб-браузер, который лежит в основе клиента Лиги, – на новую версию. В результате значительно снизилось потребление памяти, загрузка процессора и количество вылетов. Теперь мы планируем чаще делать обновления, повышая быстродействие и стабильность клиента!
Обновление Chromium Embedded Framework (CEF)
В кампании по очистке клиента случился переломный момент! В начале года мы поняли, что ничто так не улучшит клиент Лиги, как обновление Chromium Embedded Framework (CEF) – веб-браузера, который лежит в основе его архитектуры, – до версии 91. Для контекста: в последний раз мы обновляли CEF в ноябре 2019 года – до версии 74... У такого обновления два основных преимущества. Во-первых, это сразу снижает потребление памяти и загрузку процессора, а также повышает стабильность. Во-вторых, дает нам возможность вносить другие улучшения, которые становятся доступны благодаря новым функциям и инструментам (об этом чуть ниже). Поэтому обновление CEF стало нашим главным приоритетом на этот год. И теперь мы рады объявить, что в обновлении 11.17 успешно перевели клиент на версию 91! И пока что результаты впечатляют.
Сокращение количества вылетов клиента
Обновление CEF позволило сильно сократить количество вылетов клиента, и мы продолжим устранять их главные причины. По сравнению с циклом 11.16 число вылетов уменьшилось на 61%, а по сравнению со средним количеством за 2021 год – на 38%. И мы не собираемся останавливаться на этом! Судя по первым данным о цикле 11.18, вылетов стало еще меньше! Это отличная новость, учитывая, сколько раз запускается клиент в каждом цикле (в регионах Riot это число может достигать 240 миллионов!).
Обновление | Количество вылетов |
11.14 | 2 349 865 |
11.15* | 3 686 442 |
11.16 | 3 161 145 |
11.17 | 1 214 155 |
* Цикл 11.15 продлился дольше обычного, поэтому и вылетов накопилось больше.
Главная причина оставшихся вылетов – нехватка памяти. Изучив данные, мы увидели, что почти половина таких вылетов происходит на старых ПК под управлением Windows 7. Некоторые из вас и правда играют в Лигу на старых компьютерах с "семеркой" (которая указана в минимальных системных требованиях), однако мы хотим проверить, сколько из этих случаев связано с ботами, пиратскими/устаревшими версиями операционной системы и другими обстоятельствами, которые не возникают у обычных игроков.
Снижение потребления памяти
Фронтенд клиента стал потреблять гораздо меньше памяти за одну сессию. Фронтенд – это визуальные элементы, с которыми взаимодействуют игроки: кнопки, текстовые поля и практически все остальное, что вы видите и можете нажать. Вот результаты в регионах Riot:
Версия CEF | Игроки 20-го процентиля (ПК с высокой производительностью) | Игроки 50-го процентиля (ПК со средней производительностью) | Игроки 90-го процентиля (ПК с низкой производительностью) |
74 (до обновления 11.17) | 359 МБ | 597 МБ | 1016 МБ |
91 (обновление 11.17+) | 74 МБ | 275 МБ | 598 МБ |
Снижение | 285 МБ (79%) | 322 МБ (54%) | 418 МБ (41%) |
Память в данном контексте – это что-то вроде внимательности. Чем больше свободной памяти, тем больше задач может выполнять компьютер и тем лучше он будет концентрироваться на каждой из них. Стало меньше вылетов и больше ресурсов для других задач – то есть вы можете без проблем смотреть трансляции LCL, дожидаясь матча в ранговой очереди!
Снижение загрузки процессора
Мы также заметили, что теперь клиент меньше нагружает процессор. Вот результаты в регионах Riot:
Версия CEF | Игроки 20-го процентиля (ПК с высокой производительностью) | Игроки 50-го процентиля (ПК со средней производительностью) | Игроки 90-го процентиля (ПК с низкой производительностью) |
74 (до обновления 11.17) | 13% | 34% | 83% |
91 (обновление 11.17+) | 10% | 22% | 72% |
Снижение | 23% | 35% | 15% |
Это значит, что вашему компьютеру не нужно так сильно напрягаться, чтобы поддерживать работу клиента. Как результат – ниже температуры и меньше энергопотребление. К примеру, просмотр видео сильно нагружает процессор, а клиент Лиги уже не должен. Так что больше Netflix и Pentakill.
Какие возможности дает нам новая версия CEF?
Приложения на базе Chromium
Количество инструментов и приложений, в основе которых лежит Chromium, растет стремительными темпами. Вы наверняка используете их прямо сейчас – читая эту статью, общаясь с друзьями в Discord или в сотый раз слушая любимый плейлист из 10 песен. Все эти приложения используют Chromium – как и клиент Лиги. Обновление CEF открывает нам доступ к новым функциям и возможностям движка.
WebAssembly
Далее поговорим о WebAssembly – формате кода, способном выполнять сложные инструкции гораздо быстрее базового JavaScript, на котором до сих пор работает множество приложений клиента (помните приложения Ember из прошлых статей?). По сути, CEF эмулирует в клиенте специализированный "мини-компьютер", который использует WebAssembly для более эффективной обработки кода. Поскольку WebAssembly поддерживает множество языков программирования, нам будет проще использовать существующий код. При этом возрастет и быстродействие, так как мы сможем запускать процессы в этом "мини-компьютере" (а не открывать отдельные приложения). WebAssembly все чаще используется в веб-разработке, и его поддержка в Chromium улучшается с каждой версией. WebAssembly позволит ускорить клиент и откроет для нас новые возможности.
Web Workers
Теперь обсудим Web Workers. Приложения, основанные на Chromium, работают в синхронном режиме – обрабатывают по одной строчке кода за раз. Это как если бы у конвейера на заводе стоял всего один рабочий. Web Worker*S* позволяют увеличить число рабочих – то есть выполнять по несколько строк кода одновременно. Web Worker чата будет обрабатывать все, что связано с общением, в то время как основной клиент поможет вам попасть в игру. Так что если общительный друг будет настойчиво просить вас подсказать сборки для Тимо, это никак не скажется на быстродействии остального клиента. Web Workers тоже сделают клиент быстрее.
Но даже если не писать новый код, чтобы воспользоваться перечисленными выше возможностями, обновление CEF само по себе повышает быстродействие благодаря более эффективной обработке уже существующего кода JavaScript. А при улучшении других составляющих клиента мы сможем использовать все преимущества новых версий CEF.
Другие проекты
Со времени выхода прошлой статьи был улучшен и послеигровой экран. Самое важное – мы добавили код, который собирает данные о том, что именно происходит, когда отображается надпись "Ожидание статистики". Это позволило сократить время ожидания, которое иногда было непозволительно долгим. Также в обновлении 11.17 мы уменьшили вероятность полного зависания этой страницы. С обновлением 11.19 в игру были внесены другие правки игрового движка, которые еще сильнее ускоряют послеигровой экран. И последнее, но не менее важное: мы интегрировали испытания и делаем все возможное, чтобы новая система не повлияла на быстродействие и стабильность клиента.
Что дальше
Обновление CEF сыграло огромную роль в улучшении клиента, поэтому теперь мы будем обновлять его чаще (а не раз в 1,5 года). А до конца 2021-го года мы продолжим повышать стабильность клиента, работать над послеигровым экраном вместе с командой, занимающейся испытаниями, исправлять самые раздражающие ошибки и улучшать код. Спасибо, что отпраздновали вместе с нами эту важную веху в кампании по очистке клиента! До новых встреч!