Curățarea clientului: progres, obstacole, revelații
Acum două luni, am anunțat planurile noastre de a repara clientul League of Legends, un proiect pe care l-am numit ''campania de curățare a clientului''.
Echipa de Rioteri intenționează să vă țină la curent cu progresul nostru, chiar și atunci când întâmpinăm dificultăți. Pe scurt, va mai dura un timp până să ne declarăm mulțumiți de performanța clientului.
În articolul de astăzi, vom discuta despre o parte din progresul pozitiv pe care l-am făcut. Vă vom da detalii și despre obstacolele pe care le-am întâlnit, cum intenționăm să le abordăm, precum și următorii pași pe care îi vom face.
CEVA PROGRES
După cum am menționat în primul articol despre client, vrem ca prioritatea să fie scăderea duratei secvenței de inițializare la aproximativ 15 secunde, chiar și pentru jucătorii din cei 90%. Durata secvenței de inițializare este timpul de care are nevoie clientul pentru a porni.
Pentru a ne atinge obiectivul, am spus că vom consolida clientul și vom reduce numărul de plugin-uri și aplicații Ember din acesta. Dacă nu v-ați familiarizat cu terminologia, rețineți doar că plugin-urile sunt unelte care ne permit să segmentăm codul clientului în bucăți utile. Aplicațiile Ember sunt unelte care stau la baza interfeței utilizatorului.
Până acum, lucrurile mergeau bine pe acest plan. În graficul de mai jos, puteți vedea numărul total de plugin-uri și aplicații Ember din client de-a lungul timpului. Cu fiecare patch, am scăzut acest număr. Acum sunt cu 10% mai puține aplicații și cu 20% mai puține plugin-uri pe care clientul le încarcă în timpul secvenței de inițializare, comparativ cu momentul în care am început acest proces.
Ura! Vești bune! Cu toate astea, am întâmpinat și câteva piedici, pe care le vom împărtăși cu voi.
CÂTEVA OBSTACOLE
În primele câteva patch-uri din an, am observat îmbunătățiri semnificative ale duratei secvenței de inițializare, ca rezultat al lucrărilor legate de plugin-uri.
Însă începând din patch-ul 10.3, am început să vedem această durată evoluând în direcția greșită. Patch-ul 10.7 a reprezentat un punct de referință scăzut în general pentru durata secvenței de inițializare.
Puteți vedea toate acestea în graficul de mai jos. Ca să înțelegeți mai bine graficul, rețineți că ar trebui ca acele curbe să se deplaseze spre partea stângă a imaginii (durate de inițializare mai scurte).
O posibilă explicație a acestui obstacol este suprasolicitarea pe care am observat-o la serverele LoL în ultimele săptămâni. Din motive oarecum evidente, mulți dintre voi de pe tot globul stați mai mult pe acasă. Jucați foarte mult LoL, iar asta reprezintă o provocare pentru infrastructura serverelor noastre, ceea ce duce la timpi de răspuns inconsecvenți și durate mai lungi ale secvenței de inițializare a clientului.
Pe măsură ce creștem capacitatea serverelor pentru a face față situației, s-ar putea să vedem din nou îmbunătățiri reale în performanța clientului. Vom investiga și alte cauze posibile, cum ar fi reducerea cantității de cod Javascript care rulează în timpul secvenței de inițializare.
Indiferent de motivul din spatele acestui obstacol, există speranță. După cum am spus în primul nostru articol, pentru a rezolva durata secvenței de inițializare și timpul de confirmare a selecției campionilor (următorul pe listă), am curățat și refăcut aspecte fundamentale ale arhitecturii clientului.
Asta înseamnă că am eliminat bug-uri și am investigat unele dintre problemele de arhitectură fundamentală a clientului, care vă cauzau probleme.
Una dintre aceste probleme are legătură cu o caracteristică a clientului numită Affinity.
PROBLEMELE CU AFFINITY
Caracteristica Affinity a fost lansată acum câțiva ani, când am actualizat clientul. Practic e o unealtă care ne permite să identificăm care plugin-uri trebuie încărcate înainte ca secvența de inițializare să fie completă.
Am descoperit două probleme cu Affinity:
- Affinity era stricat. La un moment dat, prin 2018, Affinity a fost stricat în mod neintenționat. Din moment ce nu funcționa cum trebuie, clientul încărca automat toate plugin-urile în timpul secvenței de inițializare și după jocuri.
- Chiar dacă reparam Affinity, asta nu ne-ar fi rezolvat problemele. Credem că, și dacă Affinity funcționa corect, nu ar fi creat o listă de priorități eficientă pentru plugin-uri. Mai simplu spus, clientul mereu a avut o problemă cu încărcatul prea multor plugin-uri în timpul secvenței de inițializare.
Pe scurt, trebuie să înlocuim Affinity cu o soluție mai bună și mai eficientă.
Aceste descoperiri ne-au surprins, dar au confirmat o idee de bază pe care o aveam de când am început să lucrăm la client. Acum că am analizat în profunzime clientul, am putut descoperi unele dintre cauzele fundamentale ale problemelor.
PAȘII URMĂTORI
Acum că știm că Affinity nu face ce trebuia, putem implementa o soluție care chiar pune plugin-urile într-o ordine corectă a priorităților. Astfel, vom scădea durata secvenței de inițializare pentru jucători și vom crea o bază pentru alte lucrări importante legate de client.
Nimic din ce am descris mai sus nu schimbă la un nivel fundamental planurile noastre de a repara clientul, dar ne-ar putea încetini un pic. În orice caz, considerăm că această descoperire e ceva bun, pentru că ne oferă o cale mai clară pe mai departe. Dacă asta va duce la o experiență de încredere și cu mai puține bug-uri pentru voi, atunci eforturile noastre nu vor fi fost în van.
După ce scădem durata secvenței de inițializare cum ne dorim, vom începe a doua etapă a campaniei de curățare a clientului: reducerea timpului de răspuns al clientului în selecția campionilor. Lucrările la selecția campionilor sunt, evident, cea mai interesantă parte a acestei campanii pentru mulți dintre voi, așa că suntem nerăbdători să începem treaba.
Vom continua să vă ținem la curent cu progresul nostru. Așteptați-vă la un alt articol ca acesta în următoarele luni. Ca întotdeauna, vă mulțumim că jucați.