CZYSZCZENIE KLIENTA: zaktualizowaliśmy CEF

Wypuściliśmy naszą nową wersję CEF i odnotowaliśmy bardzo pozytywne efekty!

Zadeklarowaliśmy, że będziemy publikować aktualizacje dotyczące naszych poczynań mających na celu poprawę wydajności i niezawodności działania klienta League. Dzisiejsza porcja treści jest dziewiątym wpisem z tej serii. (Tutaj znajdziecie wpisy pierwszy, drugi, trzeci, czwarty, piąty, szósty, siódmy oraz ósmy!)

W skrócie: w patchu 11.17 zaktualizowaliśmy CEF (struktury jądra Chromium) przeglądarki umieszczonej w samym sercu klienta League i odnotowaliśmy znaczną poprawę zużycia pamięci, spadek obciążenia procesora i mniejszą liczbę awarii. Teraz możemy skupić się na planowaniu bardziej regularnych aktualizacji usprawniających niezawodność i wydajność klienta!

Aktualizacja struktury jądra Chromium (CEF)

To wielki moment w naszej kampanii oczyszczania klienta! Na początku roku ustaliliśmy, że zaktualizowanie struktury jądra Chromium (CEF) w kliencie, czyli przeglądarki stanowiącej bazę klienta League of Legends, do wersji 91 będzie działaniem mającym największy wpływ na poprawę funkcjonowania klienta. (Dla przypomnienia: ostatni raz zaktualizowaliśmy go w listopadzie 2019 r. do wersji 74). Korzyści z aktualizacji CEF są dwie: po pierwsze natychmiastowa poprawa zużycia pamięci i mocy procesora oraz stabilności. Po drugie odblokowaliśmy dzięki temu możliwość wprowadzania w przyszłości wielu ulepszeń, ponieważ nowa wersja CEF ma dodatkowe funkcje i narzędzia (więcej na ten temat za moment). Z tego względu aktualizacja CEF stała się w tym roku naszym priorytetem i z wielką radością ogłaszamy, że wprowadzenie aktualizacji do wersji 91 w patchu 11.17 zaowocowało doskonałymi rezultatami (jak na razie)!

Mniej awarii klienta

Ulepszenie CEF pomogło nam usunąć przyczyny wielu awarii klienta, a obecnie naszym celem jest dalsze rozwiązywanie problemów, które najbardziej przeszkadzają graczom. Z radością odnotowaliśmy 61% spadek zawieszeń w porównaniu z patchem 11.16 oraz 38% spadek średniej liczby zawieszeń w 2021 roku i jesteśmy gotowi dalej obniżać te wskaźniki. Prawdę mówiąc, wczesne dane z patcha 11.18 pokazują kolejny duży spadek liczby zawieszeń. To wielkie zwycięstwo, ponieważ w każdym patchu mamy ogromną liczbę uruchomień klienta (może to być nawet ponad 240 milionów w naszych regionach Riot!).

       

Patch

Liczba zawieszeń

11.14

2 349 865

11.15*

3 686 442

11.16

3 161 145

11.17

1 214 155

*Cykl patcha 11.15 był dłuższy, co tłumaczy wyższą wartość.

Główna przyczyna zdarzających się w dalszym ciągu zawieszeń wydaje się być związana z błędem braku pamięci. Po nieco głębszej analizie danych zauważyliśmy, że prawie połowa tych zawieszeń dotyczyła starych komputerów korzystających z Windows 7. Chociaż w skali globalnej mamy trochę graczy grających w League of Legends na starych komputerach z Windows 7 (minimalne wymagania sprzętowe), zamierzamy sprawdzić, w jak wielu przypadkach przyczyną są boty, nielicencjonowane/przestarzałe kopie Windows lub inne okoliczności, które nie są reprezentatywne dla zwykłych graczy League of Legends.

Redukcja zużycia pamięci

Zaobserwowaliśmy znaczny spadek zużycia pamięci przez aplikacje front-end klienta podczas pojedynczej sesji. Aplikacje front-end klienta to elementy wizualne, z których gracze mogą korzystać, takie jak przyciski, pola tekstowe i praktycznie wszystko, co można zobaczyć i kliknąć. Oto podsumowanie danych z regionów Riot:

Wersja CEF

20. percentyl graczy (szybszy sprzęt)

50. percentyl graczy (sprzęt średniej klasy)

90. percentyl graczy (wolniejszy sprzęt)

74 (przed patchem 11.17)

359 MB

597 MB

1016 MB

91 (od patcha 11.17)

74 MB

275 MB

598 MB

Poprawa

285 MB (79%)

322 MB (54%)

418 MB (41%)

W tym kontekście pamięć można porównać do działania ludzkiej uwagi — im więcej komputer ma dostępnej pamięci, tym więcej jej może poświęcić na jednoczesne wykonywanie wielu zadań lub przeznaczyć na to, co już robi. Przekłada się to na mniejszą liczbę zawieszeń klienta i większą dostępność pamięci, co pozwala oglądać transmisje LEC podczas oczekiwania w kolejce rankingowej.

Niższe obciążenie procesora

Ponadto zauważyliśmy też spadek wykorzystania mocy procesora przez klienta. Oto podsumowanie danych z regionów Riot:

Wersja CEF

20. percentyl graczy (szybszy sprzęt)

50. percentyl graczy (sprzęt średniej klasy)

90. percentyl graczy (wolniejszy sprzęt)

74 (przed patchem 11.17)

13%

34%

83%

91 (od patcha 11.17)

10%

22%

72%

Procentowy spadek

23%

35%

15%

Oznacza to, że komputer nie musi działać z bardzo dużą wydajnością, aby uruchomić klienta, co chroni procesor przed przegrzaniem i zmniejsza zużycie mocy. Film może być bardzo obciążający dla procesora, ale nie klient League. Niech zostawia więcej miejsca dla Netflixa i Pentakill.

Jakie możliwości otwiera przed nami nowsza wersja CEF?

Aplikacje oparte na Chromium

Aplikacje oparte na Chromium to obecnie jedne z najszybciej rozwijających się narzędzi i programów w świecie oprogramowania. Prawdopodobnie używacie aplikacji opartych na Chromium, czytając ten artykuł, rozmawiając na czacie Discord ze znajomymi i słuchając po raz setny listy 10 ulubionych piosenek. Każda z tych aplikacji używa Chromium, i nasz klient też. Aktualizacja struktury jądra Chromium klienta daje nam dostęp do nowszych funkcji i ulepszeń Chromium.

WebAssembly

Następnie mamy WebAssembly, format kodowania, który może obsługiwać skomplikowane polecenia znacznie szybciej niż podstawowa wersja JavaScript wciąż wykorzystywana przez wiele aplikacji naszego klienta (pamiętacie aplikacje Ember z wcześniejszych wpisów?). CEF zasadniczo udaje w kliencie wyspecjalizowany „minikomputer”, który korzysta z WebAssembly, aby skuteczniej przetwarzać kod. A ponieważ WebAssembly obsługuje szereg języków programowania, ułatwia wykorzystywanie już istniejącego kodu oraz zapewnia lepszą wydajność dzięki obsługiwaniu operacji przez ten specjalistyczny „mini-komputer” (zamiast uruchamiać osobną aplikację). WebAssembly powoli rozpowszechnia się w sieci i w każdej aktualizacji Chromium otrzymuje lepsze wsparcie. Dostęp do WebAssembly przyspieszy działanie klienta i daje nam możliwości, które wcześniej były poza naszym zasięgiem.

Web Workers

Możemy też korzystać teraz z Web Workers. W przeszłości aplikacje Chromium były zsynchronizowane, co oznacza, że w danym momencie przetwarzana była jedna linijka kodu. To tak, jakby przy linii produkcyjnej w fabryce pracował tylko jeden robotnik. Procesy Web Worker*S* zwiększają liczbę tych „robotników”, dzięki czemu jednocześnie można przetwarzać wiele linijek kodu. Chat Web Worker może na przykład zajmować się wszystkimi sprawami czatu, gdy podstawowa część klienta koncentruje się na dołączeniu was do gry. Dlatego jeśli jakiś szczególnie wylewny znajomy będzie zagadywać was o sugestie dotyczące zestawu Teemo, nie będzie to już spowalniać działania klienta. Procesy Web Workers także przyspieszają działanie klienta.

Nawet bez nowego kodu, który wykorzystywałby zalety nowej wersji, sama aktualizacja CEF wpłynęła na przyspieszenie działania klienta dzięki lepszej obsłudze kodów JavaScript, które już napisaliśmy. W miarę ulepszania kolejnych obszarów klienta będziemy mogli skupić się na metodach lepszego wykorzystania natywnych usprawnień wydajności.

Inne aktualizacje

Od ostatniego wpisu na blogu dokonaliśmy także postępów związanych z działaniem etapu zakończenia gry. Zaczęliśmy od podstaw, czyli dodaliśmy kod do zbierania danych na temat tego, co dzieje się na blokującej się stronie “Czekanie na statystyki”, z którą gracze mają wciąż problemy. To pomogło nam rozpoznać i usunąć przyczyny opóźnień, aby przechodzenie do zakończenia nie trwało tak długo jak obecnie. W patchu 11.17 wprowadziliśmy również poprawkę, która zmniejszyła ryzyko całkowitego zamrożenia tej strony. Przygotowaliśmy też dodatkowe poprawki do silnika gry, które powinny przyspieszyć przejście do etapu po zakończeniu gry w patchu 11.19. I wreszcie jesteśmy podekscytowani możliwością zintegrowania wyzwań. Przeprowadzamy obecnie weryfikacje, aby upewnić się, że ta nowa funkcja nie wpłynie na wydajność i niezawodność klienta.

Co dalej?

Aktualizacja CEF bardzo skutecznie ulepszyła działanie klienta, więc wprowadzamy harmonogram bardziej regularnych aktualizacji (zamiast raz na półtora roku, lolz). Do końca 2021 roku będziemy w dalszym ciągu pracować głównie nad niezawodnością klienta, analizować etap zakończenia gry z zespołem ds. wyzwań, usuwać najbardziej irytujące błędy i ulepszyć kod, aby poprawić wasze doświadczenia. Mamy nadzieję, że również cieszycie się z osiągnięcia tego ogromnego kamienia milowego w kampanii oczyszczania klienta! Do zobaczenia następnym razem.