Představujeme kampaň Úklid klienta

Letos vydáme vylepšení infrastruktury klienta. Cíl: Opravit klienta.

Ve zkratce: Během následujících šesti měsíců (plus minus) vydáme řadu změn a vylepšení infrastruktury pod kapotou klienta LoL. Abyste mohli náš proces sledovat, prozradíme vám konkrétní cíle pro dvě hlavní měření výkonu klienta: doba nabíhání klienta (jak dlouho to trvá, než klient naběhne) a doba potvrzení šampiona. Během vylepšování těchto parametrů budeme také řešit věci, jako jsou chyby, pády atd. Zkrátka a dobře, naším cílem je klienta spravit.

„Riote, kdy opravíte klienta?“

Na tohle se ptáte hodně. Klient není ve skvělém stavu. Obsahuje příliš mnoho chyb, příliš laguje (zejména při výběru šampionů) a má celou řadu problémů, jako je únik paměti, pády, zamrzání a tak dále. Už předtím jsme si dali závazek, že s klientem něco uděláme, ale problémy přetrvávají.

Tak jsme chtěli zkusit něco jiného.

Než abychom o našich plánech mluvili vágně, dnes vám prozradíme konkrétní cíle pro vylepšení výkonu a přesné detaily ohledně změn, které chceme během následujícího půl roku vydat.

Zaprvé si pojďme popovídat o nedávných vylepšeních výkonu, která jsme udělali, a ponořme se do konkrétních čísel, která budou sloužit jako milníky v rámci naší snahy o budoucí vylepšení.


KLIENT V ČÍSLECH

Koncem minulého roku jsme do klienta přidali pár nástrojů, které nám umožňují sledovat základní ukazatele výkonu jako třeba dobu, než klient naběhne a začne být plně funkční (tomu budeme říkat „nabíhání“).

Rádi bychom dostali nabíhání pod 15 sekund, a to i u hráčů, kteří mají relativně slabé stroje. Zjistili jsme však, že v případě některých hráčů může nabíhání momentálně trvat třikrát až čtyřikrát tolik.

Další důležitý údaj, který sledujeme, je doba „potvrzení výběru šampiona“. To je doba, během které klient po kliknutí tlačítka zaregistruje, že jste potvrdili svého šampiona. V tabulce níže uvidíte průměrnou reakční dobu pro potvrzení šampiona během aktualizace 9.22 (oranžová linka) a aktualizace 10.2 (modrá linka). Reakční doba potvrzení se počítá v milisekundách.

Client-Cleanup-Blog-1-Charts-cze.jpg

Graf výše ukazuje, jak moc se reakční doba výběru šampiona může u různých hráčů lišit. Výkon klienta se samozřejmě liší podle toho, jak rychlý je váš stroj. Pokud je váš stroj například v 10. percentilu, trvá vám potvrzení do 200 milisekund a vaše reakční doba je rychlejší než v případě 90 % všech hráčů. A naopak pokud máte reakční dobu delší než 800 ms, jste v 90. percentilu, což znamená, že váš klient je pomalejší než v případě 90 % všech hráčů.

Jak vidíte, doba potvrzení se u hráčů během aktualizace 10.2 oproti aktualizaci 9.22 hodně zlepšila. Velký důvod pro toto zlepšení spočívá v tom, že jsme ve verzi 9.23 aktualizovali Chromium, na kterém klient běží. Díky tomu jsme zaznamenali velký nárůst, ale myslíme si, že spoustě z vás klient pořád běží příliš pomalu.

Abyste pochopili, co tím myslíme, pojďme se podívat na podrobnější data k reakční době potvrzení výběru šampiona během času u pár těchto specifických skupin.

2Client-Cleanup-Blog-1-Charts-cze.jpg

Jak vidíte, modrá linka představuje 50. percentil čili „mediánového hráče“. Velký pokles reakční doby pro mediánového hráče je dobrá věc. Ale vidíte, že ještě na začátku roku 2020 se reakční doba výběru šampiona pro mediánového hráče pohybovala nad 300 ms. To není strašné, ale je to pořád znatelná prodleva.

Hráči na 70. percentilu (zelená linka) rovněž nedávno zaznamenali velké zlepšení, ale reakční doba výběru šampiona se u nich pohybuje kolem 450 ms. To je prodleva skoro půl sekundy, což je upřímně mnohem pomalejší, než bychom pro všechny hráče s relativně slušným strojem chtěli.

A nakonec se podíváme ještě na 90. percentil (oranžová linka) ve vší jeho děsivé slávě. Tito hráči budou mít už podle definice pomalejší reakční dobu než většina ostatních. Ale 800 ms je až příliš a tito hráči dosahují těchto hodnot i po aktualizaci Chromia.

Takže! Pojďme si podívat na to, co uděláme dál.


ČEMU TEĎ DÁME PŘEDNOST

Existují dva konkrétní dlouhodobé cíle pro výkon klienta, které upřednostňujeme:

  1. Chceme snížit dobu nabíhání na asi 15 sekund, a to i pro hráče na 90. percentilu. To je asi třikrát až čtyřikrát rychlejší než aktuální situace.
  2. Chceme snížit reakční dobu výběru šampiona na asi 100 ms pro hráče na 90. percentilu. To je asi osmkrát rychlejší než dnes.

Víme, co si myslíte. A co chyby? Co pády a úniky paměti?

Proč neupřednostníme tyto problémy? Důvodem je to, že při řešení doby nabíhání a doby potvrzování výběru šampiona budeme čistit a předělávat jisté základní aspekty v architektuře klienta. Domníváme se, že během práce na těchto cílech budeme moct zároveň řešit chyby, úniky paměti a pády.

Problémy jako „černá obrazovka“ ve výběru šampionů a nesprávné ukládání runových stránek jsou jen příklady toho, co chceme během tohoto procesu řešit. Ale musíme vám na rovinu říct, že tentokrát to bude nějaký čas trvat. Momentálně máme šestiměsíční plán a myslíme, že během něj dosáhneme v rámci těchto cílů významného pokroku. Ale dosažení našich dlouhodobých cílů nejspíš potrvá déle.

Takové jsou cíle a je možné, že je nedokážeme splnit. Tyto cíle vám říkáme proto, že víme, že abychom obnovili důvěru v našeho klienta, musíme být transparentnější než kdy dřív.

Jak přesně to uděláme, ptáte se?


JAK TO UDĚLÁME

Zatím jsme odhalili dva velké problémy v architektuře, které k pomalé době nabíhání přispívají. Tím prvním je architektura zásuvných modulů, která nám umožňuje rozbít kód klienta na užitečné kousky. Tato architektura zbytněla, neboť jsme do klienta přidávali další funkce. Zadruhé zneužíváme rámec Javascriptu (jménem Ember), který naše rozhraní pohání.

Klient momentálně používá až příliš mnoho zásuvných modulů a aplikací Ember. Během procesu nabíhání klienta vlastně načítáme 41 samostatných zásuvných modulů a 16 aplikací. Každému z nich trvá 100 až 800 ms, než naběhne. To není nic moc.

Máme v plánu všechny tyto zásuvné moduly a aplikace konsolidovat na mnohem méně zásuvných modulů a aplikací, které budou teoreticky efektivnější. Nejdřív se budeme soustředit na ty, které se spouštějí během nabíhání, protože se domníváme, že budou mít největší dopad napříč klientem.

1. FÁZE: NABÍHÁNÍ

Nabíhání dnes mnohým z vás trvá až 40 sekund. Pokud mezi tyto hráče patříte, víte, že tento zážitek dokáže být extrémně pomalý a trhaný. Rovněž to znamená, že když vám klient spadne, jeho restart je o to bolestivější.

Na spoustu věcí v celém klientu, jako jsou oznámení, seznam přátel a záložka Sbírka, mají vliv zásuvné moduly a aplikace, které se spouští během nabíhání. Takže ačkoliv náš stanovený dlouhodobý cíl je dostat dobu nabíhání na 15 sekund pro hráče na 90. percentilu, domníváme se, že během tohoto procesu budeme zároveň řešit spoustu chyb a neefektivních záležitostí, které mají dopad na zbytek klienta.

Po pár měsících soustředění se na nabíhání vyhodnotíme, jak blízko jsme našemu cíli, a pak – nejspíš koncem jara – přesuneme pozornost konkrétně na výběr šampionů.

2. FÁZE: VÝBĚR ŠAMPIONŮ

Výběr šampionů obsahuje řadu dodatečných zásuvných modulů a aplikací Ember. Když to řekneme na rovinu, prakticky všechno, co ve výběru šampionů děláte, vytváří nové aplikace. Výměna šampionů generuje dvě. Stejně jako změna vyvolávačova kouzla.

Čím déle hrajete LoL v rámci jedné relace, tím víc se tyto aplikace kupí na sebe, což má za následek čím dál větší lagy. Tento problém je zesílen skutečností, že většina akcí, které děláte během výběru šampionů, se spoléhá na komunikaci s našimi servery, což každou interakci ještě prodlužuje.

Skutečnou příčinou problému ve výběru šampionů je způsob, jakým naše systémy pod kapotou spravují data. Aktuální architektura výběru šampionů nám umožňuje posílat přes naše systémy spoustu silných dat. Například pokud se Riot rozhodne, že nějakého šampiona v hodnoceném režimu zakáže, tento šampion bude zakázán pro všechny hráče téměř okamžitě. A to včetně těch hráčů, kteří jsou ve výběru šampiona v okamžiku, kdy ten zákaz vyjde.

Je to velmi výkonný systém, ale jeho fungování vyžaduje spoustu koňské síly. A kvůli způsobu, jakým je systém momentálně nastaven, je zde mnoho nepotřebných bran a úzkých hrdel. Takže spousta dat se často renderuje znovu, ačkoliv byl změněn jen jeden malý vstup. To váš zážitek s klientem hodně zhoršuje.

Abychom to spravili, musíme od základů změnit způsob, jakým funguje infrastruktura pod kapotou výběru šampionů. Předěláme způsob, jakým data procházejí ze serveru do klienta během výběru šampionů, což nějaký čas zabere.

Máme další ambiciózní, dlouhodobé cíle, díky kterým může být výběr šampionů ještě efektivnější, jako je třeba konsolidace celého klienta na jedinou aplikaci Ember zcela bez zásuvných modulů. Ale z krátkodobého hlediska chceme implementovat dost změn na to, aby klient běžel cílovou rychlostí, o které jsme mluvili výše.

Není jasné, jak blízko k „dobrému“ stavu se na konci tohoto šestiměsíčního procesu dostaneme. Ale až se na ten konec dostaneme, nejspíš za sebou budeme mít velký pokrok a objevíme další jasné kroky.


DALŠÍ KROKY

Každých pár měsíců se budeme hlásit a v rámci vývojářského blogu vás informovat o našem postupu, včetně konkrétních čísel o výkonu a všech změn v časovém plánu projektu.

Držte nám palce! A díky za to, že jste hráči LoL. Brzo vám řekneme víc.