Vă prezentăm campania de curățare a clientului

Anul acesta vom lansa îmbunătățiri pentru infrastructura clientului. Obiectivul: să reparăm clientul.

Pe scurt: În următoarele aproximativ șase luni, vom lansa câteva schimbări și îmbunătățiri pentru infrastructura de backend a clientului LoL. Ca să monitorizăm procesul, vă vom împărtăși anumite obiective pentru doi indicatori de performanță a clientului: durata secvenței de inițializare a clientului (cât timp îi ia clientului să se încarce) și timpul de confirmare a selecției campionilor. În timp ce îmbunătățim acești indicatori, vom aborda și alte elemente, precum bug-uri, închideri forțate ale jocului etc. Mai exact, obiectivul nostru este să reparăm clientul.

''Riot, când veți repara clientul?''

E o întrebare pe care ne-ați tot adresat-o. Clientul nu e într-o stare prea grozavă. Are prea multe bug-uri, prea mult lag (mai ales în selecția campionilor) și o grămadă de probleme, cum ar fi irosiri de memorie, închideri forțate ale jocului, blocări ale jocului și așa mai departe. Ne-am luat angajamentul să rezolvăm situația clientului, dar tot au rămas probleme.

Așa că vrem să încercăm o altă abordare.

În loc să vorbim despre planurile noastre în termeni vagi, astăzi vă prezentăm obiective specifice legate de performanță și detalii clare despre schimbările pe care intenționăm să le lansăm în următoarele șase luni.

Mai întâi, să discutăm despre câteva îmbunătățiri recente de performanță pe care le-am făcut și să analizăm câteva statistici, care vor servi ca fundament pentru îmbunătățiri viitoare.


CÂTEVA STATISTICI DESPRE CLIENT

La finalul anului trecut, am adăugat niște instrumente în client care ne permit să monitorizăm indicatori de performanță de bază. De exemplu, cât timp îi ia clientului să se încarce și să devină complet funcțional (adică secvența de inițializare).

Ne-ar plăcea ca această durată să nu fie mai mare de 15 secunde, chiar și pentru jucătorii cu calculatoare destul de lente. Însă am descoperit că, momentan, secvența de inițializare poate dura de trei sau chiar patru ori mai mult pentru unii jucători.

Un alt element important pe care l-am monitorizat este timpul de confirmare a selecției campionilor. Aceasta este durata necesară clientului pentru a înregistra că v-ați confirmat campionul după ce dați clic pe buton. În graficul de mai jos, veți vedea timpul mediu de răspuns pentru confirmarea selecției campionilor în patch-ul 9.22 (linia portocalie) și patch-ul 10.2 (linia albastră). Timpul de răspuns pentru confirmare este calculat în milisecunde.

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

Graficul de mai sus arată cât de diferiți pot fi timpii de răspuns pentru selecția campionilor în cazul diferitor jucători. Bineînțeles, performanța clientului variază în funcție de viteza dispozitivului vostru. De exemplu, dacă durează mai puțin de 200 ms să confirmați, computerul vostru se numără în cei 10%, iar timpii voștri de răspuns sunt mai rapizi decât 90% dintre jucători. În mod similar, dacă timpii de răspuns sunt peste 800 ms, vă numărați în cei 90%, ceea ce înseamnă că aveți un client mai lent decât 90% dintre jucători.

După cum puteți vedea, timpii de confirmare s-au îmbunătățit mult pentru jucători în patch-ul 10.2, comparativ cu patch-ul 9.22. Motivul principal din spatele îmbunătățirii este că, în patch-ul 9.23, am actualizat versiunea de Chromium pe care rulează clientul. Acest lucru a adus multe beneficii, dar clientul este încă mult prea lent pentru mulți dintre voi.

Ca să înțelegeți mai bine, hai să vedem mai exact viteza de răspuns pentru confirmarea selecției campionilor de-a lungul timpului pentru câteva dintre acele grupe.

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

După cum puteți observa, linia albastră reprezintă 50% sau jucătorul ''mediu''. Scăderea bruscă a timpilor de răspuns pentru jucătorul mediu este bună. Dar puteți vedea că, de la începutul anului 2020, timpii de răspuns pentru selecția campionilor în cazul jucătorului mediu sunt de aproximativ 300 ms. Nu este oribil, dar e o întârziere evidentă.

Jucătorii din 70% (linia verde) au întâlnit recent îmbunătățiri importante, dar timpii de răspuns pentru selecția campionilor sunt de aproximativ 450 ms. Asta înseamnă o întârziere de aproximativ jumătate de secundă, ceea ce e mult prea lent decât ne dorim pentru orice jucător cu un calculator cât de cât acceptabil.

În cele din urmă, observați linia portocalie de 90% în toată gloria sa. Prin definiție, acești jucători vor întâmpina un timp de răspuns mai lent decât majoritatea. Dar 800 ms sunt prea mult și în această situație se află acești jucători chiar și după actualizarea versiunii de Chromium.

Așadar! Să vorbim despre ce vom face mai departe.


CE ARE PRIORITATE MAI DEPARTE

Au prioritate două obiective pe termen lung privind performanța clientului:

  1. Vrem să scădem durata secvenței de inițializare la aproximativ 15 secunde, chiar și pentru jucătorii din cei 90%. Asta înseamnă între trei și patru ori mai rapid, comparativ cu timpii din prezent.
  2. Vrem să scădem timpii de răspuns pentru confirmarea selecției campionilor la aproximativ 100 ms pentru jucătorii din cei 90%. Asta înseamnă de opt ori mai rapid decât în prezent.

Știm exact ce gândiți. Cum rămâne cu bug-urile? Cum rămâne cu închiderile forțate și irosirile de memorie?

De ce au prioritate aceste două lucruri? Motivul este că, în procesul de abordare a duratei secvenței de inițializare și a timpului de confirmare a selecției campionilor, vom curăța și actualiza câteva aspecte fundamentale ale arhitecturii clientului. Credem că vom putea aborda bug-uri, irosiri de memorie și închideri forțate atunci când se ivește ocazia, în timp ce urmărim aceste obiective.

Probleme precum bug-ul ecranului negru în selecția campionilor și salvarea paginilor de rune care nu funcționa corect sunt doar câteva exemple de lucruri pe care vrem să le abordăm în decursul acestui proces. Dar vrem să fim foarte sinceri despre faptul că va fi nevoie de timp. Momentan avem un plan de aproximativ șase luni și credem că vom face un progres semnificativ spre atingerea acestor obiective, dar îndeplinirea lor pe termen lung va dura mai mult.

Există posibilitatea să nu le putem îndeplini pe toate. Vă spunem despre ele pentru că știm că trebuie să fim mai sinceri ca niciodată pentru a câștiga din nou încrederea voastră în client.

Așa că ne întrebați cum vom face asta mai exact?


CUM VOM FACE ASTA

Până acum, am identificat două probleme majore de arhitectură care duc la timpii lenți ai secvenței de inițializare. Prima presupune arhitectura plugin-ului, care ne permite să separăm codul clientului în părți utile. Această arhitectură s-a complicat pe măsură ce am adăugat elemente noi de funcționalitate în client. În al doilea rând, nu folosim cum trebuie framework-ul Javascript (denumit Ember) pe care se bazează interfața utilizatorului.

În prezent, clientul utilizează prea multe plugin-uri și aplicații Ember. De fapt, în timpul procesului secvenței de inițializare a clientului, se încarcă 41 plugin-uri și 16 aplicații. Fiecare dintre ele necesită între 100 și 800 ms pentru a se încărca. Nu e prea bine.

Planul nostru e să consolidăm aceste plugin-uri și aplicații și să le actualizăm cu altele mai eficiente. Mai întâi, ne vom îndrepta atenția asupra celor care se încarcă în timpul secvenței de inițializare, pentru că acest lucru va aduce cele mai mari beneficii clientului, după părerea noastră.

ETAPA 1: SECVENȚA DE INIȚIALIZARE

Momentan durează aproximativ 40 de secunde pentru mulți dintre voi să treceți de această secvență. Dacă vă numărați printre acești jucători, știți că experiența poate fi extrem de lentă și neplăcută. Mai înseamnă și că, atunci când clientul se închide forțat, repornirea lui e și mai dificilă.

Multe elemente din client, precum notificările, lista de prieteni și tab-ul ''Colecție'', sunt afectate de plugin-uri și aplicații care se încarcă în timpul secvenței de inițializare. De aceea, chiar dacă obiectivul nostru pe termen lung e să reducem această durată la 15 secunde pentru jucătorul din cei 90%, credem că prin acest proces vom aborda și o serie de bug-uri și probleme care au un impact asupra clientului.

După câteva luni în care ne concentrăm asupra acestei secvențe, vom evalua cât de aproape suntem de obiectivele noastre și apoi vom trece mai departe la selecția campionilor, probabil la finalul primăverii.

ETAPA 2: SELECȚIA CAMPIONILOR

Selecția campionilor presupune multe plugin-uri și aplicații Ember suplimentare. Mai exact, aproape orice acțiune pe care o faceți în selecția campionilor creează aplicații noi. Schimbul de campioni generează doi campioni. La fel și schimbarea vrăjii de invocator.

Cu cât joci mai mult LoL într-o singură rundă, cu atât mai mult aceste aplicații se adună și duc la o experiență plină de lag. Această problemă devine și mai complicată prin faptul că majoritatea acțiunilor efectuate în selecția campionilor se bazează pe comunicarea cu serverele noastre, iar fiecare interacțiune creează latență.

Problema principală din selecția campionilor este felul în care sistemele noastre de backend gestionează datele. Arhitectura curentă pentru selecția campionilor ne permite să trecem foarte multe date importante prin sistemele noastre. De exemplu, dacă Riot decide să dezactiveze un campion în ranked, acel campion va fi dezactivat aproape imediat pentru toți jucătorii, inclusiv cei care sunt momentan în selecția campionilor când dezactivarea devine live.

E un sistem foarte puternic, dar necesită foarte multă forță pentru a funcționa. Iar în sistemul curent există o grămadă de elemente inutile și blocaje în acest proces. Așa că, de multe ori, foarte multe date ajung să fie redate din nou, chiar dacă s-a făcut o schimbare minoră. Iar asta afectează foarte mult experiența voastră în client.

Pentru a rezolva acest lucru, va trebui să schimbăm la nivel fundamental felul în care funcționează infrastructura din backend a selecției campionilor. Vom actualiza felul în care datele ajung prin serverul nostru la client în timpul selecției campionilor, iar asta va dura.

Avem și alte obiective ambițioase pe termen lung, care ar putea face selecția campionilor și mai eficientă, cum ar fi consolidarea întregului client până la o singură aplicație Ember fără niciun plugin. Dar, pe termen scurt, vrem să implementăm suficiente schimbări, ca să facem clientul să ruleze la standardele urmărite, pe care le-am menționat mai sus.

Nu este clar cât de mult ne vom apropia de acestea la finalul procesului de șase luni. Dar la final, credem că vom reuși să progresăm și să descoperim pași următori clari.


PAȘII URMĂTORI

Vom reveni o dată la câteva luni cu articole /dev despre progresul nostru și vor include numere despre performanță și eventuale ajustări pentru programul proiectului.

Urați-ne succes! Și vă mulțumim că jucați LoL. Vom vorbi mai multe în curând.