CZYSZCZENIE KLIENTA: stan na dziś i dalsze plany
Zadeklarowaliśmy, że będziemy regularnie publikować aktualizacje poświęcone pracom mającym na celu poprawę wydajności i niezawodności działania klienta League.
Dzisiejsza porcja treści jest siódmym wpisem z tej serii. (Tutaj znajdziecie pierwszy, tu drugi, trzeci, czwarty, piąty i szósty).
W skrócie: w pierwszym kwartale 2021 roku pracowaliśmy nad odblokowaniem możliwości aktualizacji struktury na bazie jądra Chromium (CEF). Wciąż jeszcze musimy dopracować pewne elementy, ale zakładamy, że do końca II kwartału uda się nam wprowadzić nową wersję struktury na bazie jądra Chromium (CEF), która przyniesie graczom wiele korzyści.
Aktualizacja struktury na bazie jądra Chromium (CEF)
Jak wspomnieliśmy we wcześniejszym wpisie, jednym z dużych projektów, nad którymi pracujemy, jest aktualizacja struktury na bazie jądra Chromium (CEF) w kliencie — czyli przeglądarki stanowiącej serce architektury klienta League. Szczerze mówiąc, ostatnio zbyt słabo podkreśliliśmy jej znaczenie. Aktualizacja CEF jest absolutnie najważniejszą zmianą, jaką możemy wprowadzić, aby ulepszyć klienta — zarówno w celu uzyskania bezpośrednich korzyści, jak i odblokowania możliwości wprowadzania innych udoskonaleń.
Ostatnio zaktualizowaliśmy CEF w listopadzie 2019 roku do wersji 74, a w chwili pisania tego tekstu najnowsza wersja to CEF 90. Aktualizacja CEF (zamierzamy wprowadzić wersję CEF 90) wiąże się z następującymi korzyściami:
- Redukcja awarii klienta
- Przestarzałe wersje CEF nie pracują poprawnie z częścią sprzętu. Wstępna analiza danych dowodzi, że większość awarii może wynikać z używania przestarzałej wersji CEF. Jesteśmy głęboko przekonani, że po aktualizacji liczba awarii będzie mniejsza.
- Poprawa kompatybilności
- Zespół ds. CEF intensywnie testuje nowe wersje, sprawdzając wiele różnych konfiguracji sprzętowych. Te testy zapewniają dodatkowo bezpośrednie korzyści klientowi League.
- Szybsze działanie WebSocket
- Klient League składa się z dwóch dużych części: struktury „front end”, która jest wizualnym elementem aplikacji odpowiadającym za interakcję z graczami, i dużo mniejszej struktury „foundation”, która działa w tle, dostarczając dane z naszych serwerów i śledząc wszystkie informacje, których potrzebuje klient, by wyświetlać na ekranie gracza prawidłową zawartość. Przykładowe działania wykonywane przez strukturę „foundation”:
- „Ten gracz wybrał opcję zamykania klienta podczas rozgrywki i właśnie rozpoczął grę; zamknij interfejs „front end”, dopóki nie skończy grać”.
- „Ten gracz właśnie otworzył zakładkę kolekcji. Jakich posiada bohaterów?”
- Technologia Websocket jest w zasadzie rodzajem pomostu, który łączy „front end” z „foundation”. Szerszy i łatwiejszy do pokonania pomost może dostarczyć więcej danych w krótszym czasie i to właśnie jest korzyść, którą uzyskamy dzięki nowej wersji CEF. Szczególnie w przypadku graczy korzystających ze starszego sprzętu ulepszenie technologii Websocket może skutkować lepszym działaniem klienta na etapach wymagających transferu dużej ilości danych (ekran podsumowania gry, etap wyboru bohaterów). Różnica działania tych wersji CEF może osiągać nawet takie wartości:
- 4,1 raza szybsze działanie na Windows,
- 7,8 raza szybsze działanie na Macach.
- Klient League składa się z dwóch dużych części: struktury „front end”, która jest wizualnym elementem aplikacji odpowiadającym za interakcję z graczami, i dużo mniejszej struktury „foundation”, która działa w tle, dostarczając dane z naszych serwerów i śledząc wszystkie informacje, których potrzebuje klient, by wyświetlać na ekranie gracza prawidłową zawartość. Przykładowe działania wykonywane przez strukturę „foundation”:
- Poprawa działania animacji
- Szczególnie dotyczy to generowanych na podstawie danych animacji proceduralnych, takich jak pasek doświadczenia na ekranie podsumowania gry (mamy ich cała masę). Te animacje, technicznie rzecz biorąc, są rodzajem „wycieków pamięci”, więc ogólne działanie klienta podczas długich sesji również powinno ulec poprawie.
- Zwiększenie liczby klatek na sekundę — redukcja „ślimaczenia się” i szybsze odnotowywanie kliknięć.
- Ułatwienie (czytaj: przyspieszenie, zapewnienie większej niezawodności) naszym deweloperom pracy nad:
- Dodatkowymi sposobami zapobiegania wyciekom pamięci podczas dłuższych sesji gry.
- Nowym wskaźnikiem, który zapewnia nam lepsze dane na temat czasu pracy mechanizmów klienta odpowiedzialnych za renderowanie obrazu na ekranie.
- Efektywniejsze wykorzystanie mocy procesora
- Obecnie używana w kliencie wersja CEF (74) była pierwszą wersją wyposażoną w funkcję o nazwie „Network Service”, która kieruje wszystkie polecenia sieciowe przez jeden wątek procesora, zwalniając pozostałe wątki dla innych działań, na przykład wczytywania zawartości. Obecnie nie korzystamy z tej funkcji, ponieważ w momencie ostatniej aktualizacji CEF była to zupełnie nowa technologia i nie mieliśmy czasu jej przetestować. Przygotowując następną aktualizację, możemy rozpocząć planowanie wykorzystania tej funkcji w League.
- Poprawa działania JavaScript
- Nowsze wersje Chromium wprowadzają znaczące usprawnienia w silniku v8 wykorzystywanym do obsługi JavaScript. Podobnie jak poprawa kompatybilności jest to korzyść wynikająca bezpośrednio z aktualizacji do nowszej wersji.
Nasza praca w ostatnim kwartale koncentrowała się na aktualizacji istniejących komponentów sieciowych (czyli technologii sieciowej obsługującej osadzanie filmów, wyskakujące powiadomienia i inne szczegóły) do wersji, które są kompatybilne z nowszymi wersjami CEF, aby zaktualizowanie CEF nie spowodowało żadnych szkód. Chcieliśmy, aby unowocześnianie tych komponentów przebiegło niezauważalnie, i mamy nadzieję, że wprowadzanie tych ulepszeń w kilku ostatnich patchach nie zwróciło waszej uwagi. Te aktualizacje dotyczą dużej części kodu, mamy więc świadomość okazjonalnego pojawiania się niewielkich problemów, które prześlizgują się przez sieć testów, ale likwidujemy je w miarę ich wyłapywania.
Ogólnie mówiąc, już tylko kilka tygodni dzieli nas od ukończenia aktualizacji wspomnianych komponentów. Zaraz potem będziemy mogli przejść do samej aktualizacji CEF, którą mamy nadzieję sfinalizować do końca lipca 2021 roku.
Panel społeczności
Kolejnym obszarem naszego zainteresowania, o którym wspomnieliśmy w ostatnim wpisie, jest panel społeczności. Nasz długoterminowy plan polega na przełożeniu panelu społeczności ze starej architektury ComponentsJS na Ember. Te prace zostały wstrzymane, ponieważ obecnie koncentrujemy się na ukończeniu aktualizacji CEF. Jednak już wcześniej udało się nam przeprowadzić pewne wstępne kroki konieczne do przerzucenia się na Ember i gdy skończymy z CEF, wrócimy do tego projektu.
Oto główne problemy panelu społeczności, które rozwiązaliśmy, zanim poświęciliśmy całą uwagę odblokowaniu aktualizacji CEF:
- Problemy z łącznością panelu społeczności.
- Problemy z wczytywaniem listy znajomych, wyświetlaniem niewłaściwego statusu, zapełnianiem listy znajomych.
- Znikanie informacji rankingowych z karty gracza podczas normalnej gry.
- Migotanie ekranów rozłączenia, smutnego Poro i wczytywania listy znajomych podczas uruchamiania.
Aktualizacja na temat zużycia pamięci i błędów JavaScript
W dalszym ciągu monitorujemy zużycie pamięci podczas pojedynczych sesji gry. Mamy przyjemność poinformować, że od patcha 10.25 odnotowaliśmy redukcję zużycia pamięci o wartości 30 MB na grę i obserwujemy stały spadek liczby awarii powodowanych błędem braku pamięci w całej grze.
Ostatni temat, do którego chcemy wrócić, to błędy JavaScript. W naszym wcześniejszym poście popełniliśmy pomyłkę dotyczącą liczby błędów JavaScript, których doświadczają gracze w różnych regionach Riot. W patchu 10.25 było to zawrotne 265 milionów. To potwierdza tylko wagę samego problemu, natomiast liczba awarii doświadczanych przez graczy nie zmieniła się, ponieważ błąd dotyczył jedynie naszych pomiarów. Od tamtego czasu zredukowaliśmy liczbę błędów do 140 milionów na patch i jesteśmy pewni, że możemy obniżyć ją jeszcze bardziej.
Co mamy w planach
Chociaż naszym podstawowym celem w najbliższym czasie jest aktualizacja CEF, przygotowujemy też projekty, którymi zamierzamy zająć się w późniejszym okresie 2021 roku.
- Przeniesienie panelu społeczności na Ember, jak już zasygnalizowaliśmy wcześniej.
- Ponowna analiza etapu zakończenia gry (EOG). Chociaż pod koniec ubiegłego roku i na początku bieżącego udało się nam rozwiązać kilka istotnych problemów związanych z działaniem etapu zakończenia gry, jest jeszcze wiele do zrobienia w tej kwestii. Wielu graczy wciąż narzeka na długi czas przejścia do klienta i zawieszanie się ekranu EOG. Realizację tego projektu rozpoczniemy od mapowania wszystkich interakcji klienta z silnikiem gry i usługami, a następnie sprawdzimy, jak można je poprawić. EOG współpracuje z wieloma innymi usługami, na które zespół zajmujący się klientem nie ma wpływu, więc częścią tego procesu będzie współpraca z innymi zespołami nad poszukiwaniem wspólnych rozwiązań.
- Spóźnione przejście do wyboru bohaterów. Ten problem jest często zgłaszany w niektórych regionach, co dowodzi, że ma związek z jakością połączenia graczy (struktura konfiguracji internetu jest różna w poszczególnych regionach). Chociaż niewiele możemy zrobić w kwestii problemów z siecią, to jednak zamierzamy nawiązać współpracę z zespołem ds. rywalizacji, ponieważ chcemy zrobić wszystko, co w naszej mocy, by gracze przechodzili na ekran wyboru bohaterów w sensownym czasie.
- Stabilność klienta podczas długich sesji gry. Jedną z pilnych spraw, którymi musieliśmy się zająć pod koniec zeszłego roku, było usunięcie wycieków pamięci powodujących zajmowanie przez klienta coraz większego zasobu pamięci w miarę rozgrywania kolejnych gier lub gdy klient pozostawał włączony przez długi okres. W ramach wszechstronnej analizy tego problemu będziemy poszukiwać intuicyjnych rozwiązań, dzięki którym klient będzie zawsze działał tak, jakby gracz właśnie się zalogował, niezależnie od tego, ile gier rozegrał lub jak długo klient był włączony. Uzyskanie rozwiązania będzie zapewne wymagało dalszych wysiłków z naszej strony i zajęcia się trudniejszymi do wyeliminowania wyciekami pamięci, ale musimy jeszcze ocenić zasadność tych prac w zestawieniu z rozwiązaniami krótkoterminowymi.
I to już wszystko, jeśli chodzi o tę aktualizację! Pamiętajcie, że kierunek naszych prac wyznaczają wasze opinie, które uzyskujemy za pośrednictwem różnych kanałów, na przykład ankiet regularnie przeprowadzanych wśród graczy. Dlatego informujcie nas na bieżąco, które elementy klienta wymagają najwięcej poprawek i które z wprowadzonych przez nas zmian najbardziej wpływają na jakość korzystania z klienta!