100 de puncte la PageSpeed: ce am schimbat pentru asta
Timpul de încărcare este un factor de clasare, dar sfaturile obișnuite ajută rar. Acest articol descrie ce am schimbat efectiv la propriul site, ce măsură a adus cât și unde am luat-o pe drumul greșit.
Pe scurt
- Cel mai mare câștig individual nu a venit din micșorarea fișierelor, ci din înlocuirea unei biblioteci de 458 KB cu 6 KB de cod propriu.
- A doua cauză ca mărime a fost o compresie configurată pe jumătate: serverul comprima doar HTML, nu și CSS și JavaScript.
- Un salt de aspect cu valoarea 1 a costat 24 de puncte – provocat de CSS încărcat ulterior, care a intrat în joc abia după prima afișare.
- Ce a adus cel mai puțin: formatele de imagine. Ce a adus cel mai mult: renunțarea la lucruri.
Valoarea de pornire a fost 58 din 100 pe telefon. Nu este o valoare proastă pentru un site cu efect 3D în antet, dar este o valoare pe care Google o penalizează simțitor în căutarea mobilă. La final au ieșit 100 de puncte pe desktop și 98 pe telefon, cu 100 și la accesibilitate.
Ce urmează nu este o listă generală de verificare, ci parcursul real – inclusiv locurile în care ne-am înșelat.
Situația de pornire
| Valoare măsurată (mobil) | înainte | după |
|---|---|---|
| Performanță | 58 | 98 |
| Accesibilitate | 95 | 100 |
| Prima afișare | 6,1 s | 1,4 s |
| Cel mai mare element vizibil | 11,1 s | 2,1 s |
| Transferat în total | 298 KB | 184 KB |
| din care JavaScript | 121 KB | 5 KB |
Cele cinci intervenții care au contat cu adevărat
1. Înlocuirea bibliotecii, nu optimizarea ei
Antetul arată un nor de particule în 3D. Pentru asta rula o bibliotecă grafică cunoscută – 458 KB după micșorare. Măsurarea arăta că 51 KB din ea nu erau executați niciodată.
Privirea decisivă a fost întrebarea de cât avem nevoie în realitate. Erau unsprezece componente: renderer, scenă, cameră, geometrie, material și câteva clase ajutătoare. Toate se pot programa direct pe interfața grafică a browserului.
Rezultat: 458 KB au devenit 6 KB. Reprezentarea este identică – am preluat aceleași shadere.
2. Compresia era pornită doar pe jumătate
În configurația serverului, compresia era pe «pornit» – dar linia care spune ce tipuri de fișiere să fie comprimate era comentată. Aceasta este setarea implicită a multor distribuții. Rezultat: se comprima exclusiv HTML.
Biblioteca grafică trecea deci necomprimată prin cablu. După activare: 1243 KB au devenit 251 KB. În plus, punem acum variantele comprimate precalculate alături, ca serverul să nu recalculeze la fiecare accesare.
Efort: două linii de configurare. Efect: aproape un megaoctet la fiecare primă accesare.
3. Eliminarea completă a bibliotecii de animație
Pentru aparițiile la derulare rula încă o bibliotecă, 114 KB. Măsurarea o indica în plus drept cauză a recalculărilor forțate de aspect – interoga geometria în timpul derulării și obliga browserul să recalculeze aspectul în mijlocul mișcării.
Înlocuită cu un IntersectionObserver care doar setează o clasă. Mișcarea propriu-zisă o face CSS. 114 KB mai puțin, fără recalculări, aproximativ 40 de linii de cod propriu.
4. Favicon-ul avea 205 KB
Un fleac cu efect surprinzător, pentru că se încarcă foarte devreme. Înlocuit cu un fișier SVG de 6 KB, generat din logoul existent.
Știai că…?
Pentru afișarea în rezultatele de căutare Google, un favicon SVG nu ajută la nimic – Google acceptă acolo doar formate raster, iar imaginea trebuie să fie pătrată, cu latura un multiplu de 48 de pixeli.
Cine depune deci doar un SVG primește în rezultatul de căutare substituentul gri în loc de propriul logo. Indicarea ambelor, una lângă alta, este calea corectă.
5. Interogarea geometriei în cadrul de animație
Un script citea la fiecare eveniment de derulare înălțimea totală a documentului. Această proprietate nu poate fi dată de browser din memorie – pentru ea trebuie să recalculeze aspectul întregii pagini, în mijlocul derulării.
Regula care rezultă de aici și care este valabilă peste tot: citește în eveniment, scrie în cadrul următor. Niciodată invers. De atunci înălțimea paginii este măsurată o dată și reținută, în loc să fie cerută din nou de șaizeci de ori pe secundă.
Greșeala care a costat 24 de puncte
Ca să scăpăm de ultima cerere blocantă, împărțisem foaia de stil: partea necesară pentru zona vizibilă intra direct în document, restul se încărca ulterior. Un procedeu obișnuit.
Tăietura era la un reper din fișierul-sursă, în spatele căruia presupuseserăm că se află zona vizibilă. În realitate, după el urmau regulile pentru logoul din antet, pentru distanțele de dedesubt și pentru apariții. Pagina se construia deci fără ele și era împinsă la locul potrivit o secundă mai târziu.
Rezultatul: Cumulative Layout Shift de 1,0 – și cu asta 76 în loc de 100 de puncte pe desktop. Deosebit de neplăcut: local, cu conexiune frânată, valoarea era 0, pentru că foaia de stil ajungea acolo suficient de devreme. Greșeala era vizibilă doar pe conexiune rapidă.
Învățătura: ori toată foaia de stil în document, ori niciuna. O încorporare parțială presupune că știi exact ce regulă este necesară în zona vizibilă – iar asta nu se știe niciodată durabil la o pagină care crește.
Ce a adus puțin
De dragul completitudinii, măsurile care apar în orice ghid și care la noi au fost abia măsurabile:
Formatele de imagine. Pagina noastră de start are foarte puține imagini – logoul este un fișier SVG. Acolo unde apar imagini, conversia merită bineînțeles; ca pârghie principală este bună doar pentru paginile încărcate cu imagini.
Micșorarea suplimentară a fonturilor. Găzduim două familii de fonturi la noi și le preîncărcăm pe cele necesare în zona vizibilă. O optimizare suplimentară ar fi posibilă, dar nu mișcă valoarea.
Locația serverului. Recomandată frecvent, în cazul nostru irelevantă: timpul până la primul octet era deja de 20 de milisecunde. Cine stă deja bine acolo nu câștigă nimic dintr-o rețea de distribuție.
Procedeul de urmat întocmai
- Măsurați înainte să schimbați ceva. Mobil și desktop separat, notați valorile.
- Căutați cel mai mare fișier transferat. Aproape întotdeauna este JavaScript. Întrebarea nu este cum îl micșorezi, ci dacă ai nevoie de el.
- Verificați compresia. Nu dacă este pornită, ci pentru ce tipuri de fișiere.
- Numărați cererile blocante. Fiecare fișier de stil din antet reține prima afișare.
- Verificați salturile de aspect fără frână. Testul care ne-a lipsit nouă.
- Măsurați din nou după fiecare modificare. Altfel nu se știe la final ce a avut efect.
Ajută-mă să traduc raportul PageSpeed al paginii mele într-o ordine de priorități. Fii sever; nu lăuda nimic. Valorile mele măsurate: - Mobil: [punctaj], Desktop: [punctaj] - LCP, TBT, CLS pe fiecare dispozitiv: [valori] - Cele mai mari fișiere transferate, cu dimensiune: [listă] - Cereri care blochează afișarea: [listă] - Mesajele din raport: [inserează textul] Despre pagină: - Cum este construită: [CMS / static / constructor] - Este JavaScript necesar pentru conținutul vizibil? [da/nu] - Cum este livrat CSS-ul? [extern / în avans / parțial în avans] Sarcini: 1. Atribuie fiecărui mesaj o cauză și spune ce indicator influențează – LCP, TBT sau CLS. 2. Sortează măsurile după efect raportat la efort. Spune la fiecare câte puncte mișcă realist și de ce. 3. Numește măsurile din raport care la modul meu de construcție nu aduc practic nimic – și motivează, în loc să le lași pur și simplu deoparte. 4. La fiecare fișier JavaScript mare întreabă întâi dacă este necesar, înainte să propui micșorarea. 5. Atrage atenția dacă CSS-ul este livrat doar parțial în avans și explică de ce asta poate fi mai rău pentru CLS decât deloc. 6. Spune ce ar trebui să măsor din nou după fiecare modificare. Nu inventa valori măsurate.
Concluzie
Punctajul în sine nu este scopul – este o valoare măsurată, nu un rezultat de afaceri. Ce contează este experiența din spate: o pagină care se poate citi după 1,4 secunde este citită de mai mulți oameni decât una care are nevoie de șase secunde. La vizitatorii mobili pe rețea celulară, diferența este mai mare decât orice optimizare de text.
Drumul într-acolo a trecut în cazul nostru printr-o singură întrebare recurentă: avem nevoie de asta? Cinci din șase intervenții au constat în a elimina ceva, nu în a adăuga ceva.
Întrebări frecvente
Cum se ating 100 de puncte la PageSpeed Insights?
La majoritatea site-urilor prin trei pași: eliminarea sau înlocuirea celui mai mare fișier JavaScript, activarea efectivă a compresiei pentru CSS și JavaScript și eliminarea salturilor de aspect. Formatele de imagine și locația serverului sunt rareori strangularea.
Cât de important este timpul de încărcare pentru clasarea în Google?
Este un factor confirmat, dar nu unul puternic – conținutul și relevanța cântăresc mai greu. Efectul mai mare este indirect: paginile lente sunt abandonate mai des, iar acest comportament intră în evaluare.
Ce este Cumulative Layout Shift și cum se remediază?
Valoarea măsurată pentru elementele care își schimbă poziția după prima afișare. Cauzele cele mai frecvente: imagini fără dimensiuni fixe, foi de stil încărcate ulterior și fonturi cu metrici foarte diferite. Se remediază prin stabilirea spațiului în avans – prin indicații de lățime și înălțime sau printr-un raport de aspect fix.
Ar trebui încorporat CSS-ul în HTML?
La foi de stil mici da, dar atunci complet. O încorporare parțială cu încărcarea ulterioară a restului economisește o cerere și se alege în schimb cu salturi de aspect, de îndată ce lipsește o regulă din zona vizibilă. La noi erau 7 KB comprimați – pentru asta merită încorporarea completă.
Cât aduce renunțarea la biblioteci?
În cazul nostru cea mai mare poziție individuală: 458 KB de bibliotecă grafică au devenit 6 KB de cod propriu, plus 114 KB de bibliotecă de animație duși la zero. Dacă merită depinde de cât din bibliotecă folosiți efectiv – măsurarea arată JavaScript-ul nefolosit.
Marketing care se configurează singur
Beta Studio Engine este deschisă. Rezervă-ți locul și contribuie de la început.
Participă la beta →