Klienstakarítás: eredmények, akadályok, tanulságok
Néhány hónapja bejelentettük, hogy szeretnénk kijavítani a League of Legends-kliens hibáit, amit „a kliens rendbe szedéseként” neveztünk el.
A Riot csapata szeretne tájékoztatni benneteket ezzel kapcsolatban akkor is, ha nehézségek adódnak a munka során. Őszintén szólva még bőven akad tennivalónk, mielőtt elégedetten hátradőlhetnénk.
A mostani bejegyzésben az eddig elért eredményeket vesszük számba. Arról is beszámolunk, hogy milyen akadályokba ütköztünk, zárásként pedig szó lesz a közeljövőre vonatkozó terveinkről.
NÉHÁNY EREDMÉNY
A klienssel foglalkozó első bejegyzésünkben megírtuk, hogy rövidebb, legfeljebb 15 másodperces rendszerindítási időt szeretnénk elérni, még a 90. percentilisbe tartozó játékosok esetén is. Emlékeztetőül: a kliens rendszerindítási ideje a kliens betöltéséhez szükséges idő.
A cél elérése érdekében egyesíteni akartuk a lehető legtöbb beépülő modult és Ember-alkalmazást, ezzel csökkentve a számukat. Azok kedvéért, akik nem járatosak a témában: a beépülő modulok olyan eszközök, amelyek a kliens kódját kezelhető méretű részekre bontják. Az Ember-alkalmazások a felhasználói felületet működtető eszközök.
Eddig elég jól haladunk e téren. Az alábbi grafikonon láthatjátok a beépülő modulok és az Ember-alkalmazások számának alakulását a kliensben. Minden frissítésben sikerült csökkenteni a számot. Jelenleg körülbelül 10%-kal kevesebb Ember-alkalmazást és 20%-kal kevesebb beépülő modult kell betöltenie a kliensnek a rendszerindítás során a kezdeti állapothoz képest.
![1ClientCleanup_Charts-hun.png](https://cmsassets.rgpub.io/sanity/images/dsfx7636/news_live/296697baefdda1f0615f5badcf95f19f02c1ab01-1261x792.png)
Ez nagyon szép eredmény! Azonban néhány akadály is felmerült, amelyekről szeretnék röviden beszámolni.
NÉHÁNY AKADÁLY
Az év első néhány frissítésében a beépülő modulokon végzett munka miatt jelentős javulást tapasztaltunk a rendszerindításhoz szükséges időben.
Ugyanakkor a 10.3-as frissítésben a rossz irányba mozdult el a rendszerindítási idő, és a 10.7-es frissítésben új negatív rekordot döntött.
Ezt láthatjátok az alábbi grafikonon is. Egy kis segítség az értelmezéshez: azt szeretnénk, hogy ha a görbék a grafikon bal oldalához lennének közelebb (gyorsabb rendszerindítás).
![2ClientCleanup_Charts-hun.png](https://cmsassets.rgpub.io/sanity/images/dsfx7636/news_live/1146433ddd427f9d3481a78443ebdc672b768624-1261x792.png)
A jelenséget magyarázhatja az elmúlt hetekben a LoL szervereit érő megnövekedett terhelés. Érthető okokból világszerte mindenki több időt tölt otthon. Sokan és sokat játszanak a LoL-lal, ami természetesen leterheli a szerverinfrastruktúránkat, ami egyenetlen válaszidőt és a kliens lassabb betöltését eredményezi.
Fokozatosan növeljük a szerverkapacitásunkat, és lehetséges, hogy ez egycsapásra javítani fogja a kliens teljesítményét. Más lehetséges okokat is vizsgálunk, például megpróbáljuk csökkenteni a rendszerindítás során betöltött Javascript-kód mennyiségét.
Bármi is legyen a probléma oka, nincs veszve minden remény: ahogy az első blogbejegyzésben is említettük, a rendszerindítási idő és a hősválasztás véglegesítésének felgyorsításához (ez a következő tétel a listánkon) bizonyos alapvető változtatásokra és egy kis takarításra van szükség a kliens architektúrájában.
Ez azt jelenti, hogy programhibákat javítunk ki, és olyan alapvető problémák okait kutatjuk az architektúrában, amelyek régóta megkeserítik a játékosaink életét.
Az egyik architektúraszintű problémáról kiderült, hogy az Affinity nevű kliensfunkcióhoz kötődik.
MI A BAJ AZ AFFINITYVEL?
Az Affinity néhány éve, a kliens frissítésekor került be a funkciók közé. Gyakorlatilag egy olyan eszköz, amellyel megadhatjuk, hogy mely beépülő modulokat kell betölteni a rendszerindítás befejezése előtt.
Két problémát azonosítottunk az Affinityben:
- Az Affinity hibásan működik. A 2018-as év egy eddig ismeretlen pontján az Affinity bemondta az unalmast. Mivel az Affinity nem működik rendesen, a kliens alapértelmezés szerint minden egyes beépülő modult betölt a rendszerindítás során és a meccsek után.
- Az Affinity kijavítása sem oldaná meg a problémánkat. Úgy látjuk, hogy az Affinity a megfelelő működés mellett sem lenne képes hatékonyan meghatározni a beépülő modulok betöltési sorrendjét. Egyszerűbben fogalmazva: a kliensnek az elejétől fogva gondja volt azzal, ha túl sok beépülő modult kellett betölteni a rendszerindítás során.
Röviden: az Affinityt teljesen le kell cserélni egy jobb és hatékonyabb megoldásra.
A felfedezések egy része meglepő volt számunkra, de legalább visszaigazolták az egyik alapvető feltételezésünket, amellyel belevágtunk a munkába: ha alaposan átvizsgáljuk a kliens kódját, akkor felfedezhetjük az akadályozó tényezők gyökérokait.
TOVÁBBI LÉPÉSEK
Most, hogy tudjuk, hogy az Affinity nem tudja teljesíteni azt, amire terveztük, elkezdhetünk fejleszteni egy új megoldást, amely megfelelően meg tudja határozni a beépülő modulok prioritását. Ezzel felgyorsítjuk a rendszerindítást a játékosok számára, és megnyitjuk az utat más fontos fejlesztések előtt.
Ezek egyike sem forgatja fel a kliens kijavításával kapcsolatos terveinket, azonban kissé lelassíthatja az előrehaladásunkat. Mindenesetre ez egy nagyon fontos és hasznos felfedezés volt számunkra, és világosabbá tette, hogy mi a teendőnk. Ha ez megbízhatóbb és kiszámíthatóbb játékélményt eredményez számotokra, akkor már megérte minden belefektetett munkaóra.
Ha sikerült kellően felgyorsítani a kliens rendszerindítását, következhet a kliens rendbe szedésének következő lépése: a kliens válaszidejének csökkentése a hősválasztás során. Nyilvánvalóan sokatok szemében ez lesz a legfontosabb és leglátványosabb eredményekkel kecsegtető szakasz.
Később ismét beszámolunk majd arról, hogy mire jutottunk. Néhány hónapon belül egy ehhez hasonló blogbejegyzéssel jelentkezünk. Mint mindig, ezúttal is köszönjük, hogy velünk tartottatok.