KLIENSTAKARÍTÁS: 2021 eredményei és ami még jön
Megígértük, hogy rendszeresen beszámolunk arról, hol tartanak a LoL-kliens teljesítményének és megbízhatóságának javításával kapcsolatos munkálatok.
A mai bejegyzés e sorozat hetedik része. (Az első rész itt, a második itt, a harmadik itt, a negyedik itt, az ötödik itt, a hatodik pedig itt olvasható.)
Röviden: 2021 első negyedéve azzal telt, hogy előkészítsük a terepet a Chromium Embedded Framework (CEF) frissítéséhez. Még maradt némi tennivalónk, de reményeink szerint a 2. negyedév végére elkezdjük használni a Chromium Embedded Framework (CEF) új verzióját, ami számos előnnyel fog járni a játékosok számára.
A Chromium Embedded Framework (CEF) frissítése
Ahogy legutóbb említettük, az egyik legnagyobb jelenlegi projektünk a Chromium Embedded Framework (CEF), a LoL-kliens architektúrájának középpontjában álló webböngésző kliensverziójának frissítése. A múltkor nem hangsúlyoztuk ki eléggé ennek fontosságát. A CEF frissítése a legnagyobb egyszeri beavatkozás, amellyel hozzájárulhatunk a kliens működésének javításához, amely egyrészt számos közvetlen előnyt biztosít, másrészt megkönnyíti a további fejlesztéseket.
Legutóbb 2019 novemberében frissítettük a CEF-et a 74-es verzióra, ám a cikk írásának pillanatában a legfrissebb verzió a CEF 90. A CEF frissítése (a célverzió a CEF 90) a következő előnyökkel jár:
- Ritkábban omlik össze a kliens
- A régebbi CEF-verziók nincsenek kibékülve egyes hardverekkel. A kezdeti vizsgálatok azt mutatták, hogy az összeomlások nagy része az elavult CEF-verzió miatt következett be. Ki merjük jelenteni, hogy a frissítést követően jóval kevesebb összeomlást fognak tapasztalni a játékosok.
- Továbbfejlesztett kompatibilitás
- A CEF-csapat alaposan leteszteli az új verziókat a különböző hardverkombinációkon. A LoL-kliens ennek a tesztelésnek a legnagyobb nyertese.
- Javuló WebSocket-teljesítmény
- A LoL-kliens két fő részből áll: az „előtér” a látható alkalmazás, amellyel a felhasználók interakciókba lépnek. A jóval kisebb „alaprendszer” a háttérben fut, adatokat kér le a szerverekről, és nyomon követi az összes információt, amelyre a kliensnek szüksége van, hogy a megfelelő dolgok jelenjenek meg a képernyőn. Néhány példa az alaprendszer működésére:
- „Ez a játékos kiválasztotta azt a beállítást, hogy a kliens záródjon be a játékok alatt, és most elindított el egy meccset, szóval kapcsold ki az előteret a meccs idejére.”
- „Ez a játékos megnyitotta a Gyűjtemények lapot. Mely hősöket birtokolja?”
- A websocket gyakorlatilag az előteret az alaprendszerrel összekötő cső. A szélesebb, kevesebbet kanyargó cső több adatot tud szállítani és gyorsabban, és az újabb CEF-verzió pontosan ezt nyújtja. A websocket fejlesztése különösen a régebbi hardveren játszók számára hozhat érezhető javulást, a jelentős adatforgalommal járó szakaszokon (meccsvégi képernyő, hősválasztás). Ekkora különbségre számítunk a CEF-verzió lecserélésekor:
- 4,1-szer nagyobb sebesség Windowson
- 7,8-szer nagyobb sebesség Macen
- A LoL-kliens két fő részből áll: az „előtér” a látható alkalmazás, amellyel a felhasználók interakciókba lépnek. A jóval kisebb „alaprendszer” a háttérben fut, adatokat kér le a szerverekről, és nyomon követi az összes információt, amelyre a kliensnek szüksége van, hogy a megfelelő dolgok jelenjenek meg a képernyőn. Néhány példa az alaprendszer működésére:
- Megnövelt animációs teljesítmény
- Az animációkat procedurálisan hozza létre a rendszer az adatok alapján, ilyen például a tapasztalati sáv a meccsvégi képernyőn (és még nagyon sok hasonló ilyen elem van). Ezek az animációk gyakorlatilag memóriavesztést okoznak, ezért a kliens teljesítménye biztosan javulni fog a hosszú játékhasználat során.
- Jobb képkockasebesség – kevésbé „lomha” a játék, gyorsabb a reakció a kattintásokra
- Könnyebben (gyorsabban, megbízhatóbban) dolgozhatnak vele a fejlesztők
- További lehetőségek a hosszú játékmenet során keletkező memóriavesztés elkerülésére.
- Egy új metrika segítségével pontosabban mérhetjük, hogy a kliens adatainak mennyi időt vesz igénybe, hogy megjelenjenek a képernyőn.
- Intelligensebb processzorhasználat
- A kliens jelenlegi CEF-verziójában (74) jelent meg a „hálózati szolgáltatás” funkció, amely az összes hálózati kérést a processzor egyetlen szálára irányítja, így felszabadítva a többi szálat olyan feladatok elvégzéséhez, mint a tartalmak betöltése. Ezt a funkciót jelenleg nem használjuk, mert a CEF frissítésekor még vadonatúj volt, és nem volt időnk kísérletezgetni vele. A következő frissítést követően elkezdhetjük tervezni a bevezetését a LoL-ban.
- Megnövelt Javascript-teljesítmény
- A Chromium újabb verziói jelentős fejlesztéseket tettek elérhetővé a v8 motorban, amely a Javascriptet kezeli. A kompatibilitási fejlesztésekhez hasonlóan ennek áldásait is azonnal élvezhetjük a verziófrissítést követően.
Az elmúlt negyedévünk elsősorban a meglévő webösszetevők (a webhely olyan technikai elemei, mint a videók beágyazása, a felugró értesítések stb.) olyan verzióra történő frissítésével telt, amelyek kompatibilisek az új CEF-verziókkal, hogy a CEF frissítése ne bolondítsa meg a működésüket. Az összetevők frissítését próbáltuk „diszkréten” elvégezni, remélhetőleg egyetlen játékosnak sem tűnt fel, hogy milyen sok dolog frissült a háttérben az előző néhány frissítési ciklus során. Ezek a frissítések rengeteg kódot módosítanak, ezért sajnos elképzelhető, hogy adódnak a tesztelés során ki nem szűrt problémák, de a lehető leggyorsabban javítjuk őket.
Néhány hét múlva befejeződik az összetevők frissítése, ezután következhet magának a CEF-nek a frissítése, ami reményeink szerint 2021 júliusának végéig megtörténik.
Közösségi panel
Legutóbb említettük, hogy a Közösségi panel az egyik kiemelt projektünk. A hosszú távú tervünk az, hogy a közösségi panel a ComponentsJS (régi architektúra) helyett az Emberre épüljön. Ez a projekt egyelőre parkolópályára került, amíg a CEF-frissítésen dolgozunk, de már végeztünk az Emberre aló áttérés néhány előkészítő lépésével, és biztosan visszatérünk rá a CEF frissítését követően.
Íme néhány nagyobb, a közösségi panelhez kötődő probléma, amelyeket sikerült megoldanunk, mielőtt minden figyelmünket a CEF-frissítésre fordítottuk:
- A közösségi panel nem csatlakozik
- Nem töltődik be a barátok listája, hibásan jelenik meg az állapot, nem jelennek meg a barátok
- A rangsorolt adatok eltűnnek a játékoskártyáról, amikor a játékos normál meccset játszik
- Indításkor megszűnt a lekapcsolódást jelző felirattól a szomorú porón át a barátok listája betöltéséig jelentkező villogás
Hírek a memóriakezelés és a Javascript-hibák javításáról
Tovább dolgoztunk az egy játékmenet során játszott meccsek memóriakezelésén. Örömmel jelentjük, hogy a 10.25-ös frissítés óta közel 30 MB-tal csökkent a játékonkénti memóriahasználat, és folyamatosan csökken az elfogyó memória miatt bekövetkező összeomlások száma.
Végül szeretnénk pár szót ejteni a Javascript-hibákról. Az előző bejegyzésben hibásan jelent meg a Riot-régiókban jelentkező, a játékosok által tapasztalt JS-hibák száma. A 10.25-ös frissítésben rengeteg, 265 millió ilyen hiba volt. Annyi pozitívum ebben is van, hogy még inkább hangsúlyozza a probléma súlyosságát, és hogy a játékosok által tapasztalt hibák tényleges száma nem csökkent, csak a mérési módszerünk. Azóta sikerült frissítési ciklusonként 140 millióra letornázni ezt a számot, és biztosak vagyunk abban, hogy még lejjebb tudjuk szorítani.
Min dolgozunk jelenleg?
Bár rövid távon a CEF-frissítés kapott kiemelt prioritást, több projekt is van, amelyeknek neki szeretnénk látni 2021-ben.
- A Közösségi panel áthelyezése Emberre – részletek pár sorral feljebb.
- A játékvégi képernyő felülvizsgálata. Bár tavaly és idén is több jelentős problémát sikerült orvosolni a játékvégi képernyő kapcsán, maradt még tennivaló. Továbbra is sok játékos panaszkodik arra, hogy sokáig tart visszalépni a kliensbe, és hogy kifagy a képernyő. Ha nekilátunk ennek a projektnek, elkezdjük feltérképezni a kliens és a játékbeli motor, illetve szolgáltatások közti interakciókat, és meglátjuk, mit tehetünk az ügyben. Ez a képernyő számos olyan szolgáltatással működik együtt, amelyekhez nincs közvetlen hozzáférése a kliensen dolgozó csapatnak, ezért más csapatokkal közösen tudjuk javítani a hibákat.
- Lassú belépés a hősválasztó képernyőre. Ez egy sokszor jelentett probléma az egyes régiókban, ezért azt gyanítjuk, hogy a játékosok internetkapcsolatához lehet köze (az internetes infrastruktúra régiónként eltérő). Magával az internetkapcsolattal sajnos nem tudunk semmit sem kezdeni, de a versenyjátékért felelős csapattal közösen arra törekszünk, hogy a játékosok a lehető leghamarabb bejussanak a hősválasztó képernyőre.
- A kliens stabilitása a hosszabb játékmenetek során. Az év végén vágtunk bele azon memóriavesztéssel kapcsolatos problémák megoldásába, amelyek következtében a több egymást követő játék során a kliens egyre több memóriát használt fel vagy túl lassan reagált a bevitt parancsokra. Amint lesz időnk átfogóbb megoldások kidolgozására, olyan intuitív lehetőségeket keresünk, amelyekkel a játékosok mindig úgy használhatják a klienst, mint közvetlenül a bejelentkezést követően, függetlenül az addig már lejátszott meccsek számától vagy attól, hogy mióta van megnyitva a kliens. Nyilván az lenne az ideális, ha az egész csapat a memóriavesztéses esetek megszüntetésén dolgozhatna, de egyelőre be kell érnünk a rövid távú megoldásokkal.
Egyelőre ennyi! A munkánkat jelentősen befolyásolják a tőletek, például a rendszeres kérdőíveken keresztül kapott visszajelzések. Kérünk benneteket, hogy a jövőben is tudassátok velünk, hogy a kliens melyik része szorul rá leginkább a javításra, és hogy milyen változás javítaná a legnagyobb mértékben a játékélményt!