Performancë
Kokat e cache-it të shfletuesit
A i thotë serveri shfletuesit sa gjatë ta ruajë përgjigjen; mjeti kërkon Cache-Control, ETag ose Expires.
Çfarë është
Kokat e cache-it i thonë shfletuesit nëse dhe sa gjatë mund ta ruajë një përgjigje për ta ripërdorur pa e kërkuar sërish.
Tri kokat kryesore bëjnë punë të ndryshme. Cache-Control përcakton politikën: sa sekonda është e freskët, a mund ta ruajnë ndërmjetësit, a duhet rivaliduar. ETag jep një gjurmë të përmbajtjes që lejon shfletuesin të pyesë "a ka ndryshuar?" dhe të marrë një përgjigje 304 pa trup. Expires është forma e vjetër e Cache-Control: max-age dhe sot përdoret vetëm si rezervë.
Politika e duhur ndryshon sipas burimit: HTML-ja duhet rivaliduar shpesh, ndërsa një skedar CSS me hash në emër mund të ruhet një vit.
Pse ka rëndësi
Pa cache, çdo vizitë e dytë shkarkon gjithçka nga fillimi: logon, stilet, skriptet, fontet. Për një vizitor që hap pesë faqe të sajtit, kjo do të thotë pesë shkarkime të të njëjtave skedarë.
Efekti është më i dukshëm te navigimi brenda sajtit dhe te kthimet. Faqja e parë ka të njëjtën shpejtësi; e dyta mund të jetë disa herë më e shpejtë.
Ka edhe efekt te serveri: kërkesa që nuk bëhen nuk kushtojnë as bandë as procesor.
Gabimi i kundërt kushton po aq: një cache shumë i gjatë mbi HTML-në do të thotë se ndryshimet nuk shihen nga vizitorët e vjetër për ditë të tëra. Dhe një cache i gjatë mbi një skedar CSS pa hash në emër do të thotë se përditësimi i dizajnit nuk arrin.
Si rregullohet
# HTML — rivalidohet gjithnjë
location ~* \.html?$ { add_header Cache-Control "no-cache"; }
# burime me hash në emër — një vit, të pandryshueshme
location ~* \.(css|js|woff2)$ { add_header Cache-Control "public, max-age=31536000, immutable"; }Hapat:
- Vendos hash në emrat e skedarëve statikë (
app.7f3a91.css). Atëherë cache-i i gjatë është i sigurt, sepse emri i ri është URL e re. - `no-cache` për HTML do të thotë "ruaje, por pyet para se ta përdorësh" — jo "mos e ruaj".
- `immutable` e kursen edhe pyetjen për burime që nuk ndryshojnë kurrë.
- Mos përdor `no-store` veçse për përgjigje me të dhëna personale.
- Kujdes me CDN-në:
publiclejon ruajtjen te ndërmjetësit;privatejo.
Si e mat ky mjet
PerformanceAnalyzer::checkCacheHeaders() (services/PerformanceAnalyzer.php:100) kontrollon nëse ekziston ndonjëra nga tri kokat: cache-control, etag ose expires. Dy dalje: ekziston së paku njëra (:107, kaluar), asnjëra (:109, paralajmërim).
Çfarë NUK e mat
Kontrolli sheh vetëm praninë e kokës, jo vlerën e saj. Një Cache-Control: no-store — që e ndalon plotësisht cache-in — kalon si "cache i konfiguruar", njësoj si një politikë e menduar mirë. Kjo është mospërputhje e drejtpërdrejtë midis asaj që raportohet dhe asaj që ndodh.
Matet vetëm dokumenti HTML. Burimet statike — CSS, JavaScript, fonte, imazhe — ku cache-i ka ndikimin më të madh, nuk kontrollohen fare.
Nuk vlerësohet as përputhshmëria e politikës me llojin e burimit, as prania e hash-it në emrat e skedarëve, as sjellja reale e rivalidimit.
Mospërputhje midis tekstit të analizuesit dhe matjes
| Teksti i analizuesit | Çfarë ndodh | Si u mat | Burimi |
|---|---|---|---|
| Cache headers are set — Browser caching is configured. | Kontrollohet vetëm prania e çelësit; vlera nuk lexohet. no-store e ndalon plotësisht cache-in. | Kushti te :102 përdor isset mbi tri koka. — matur gjatë 5.10 | services/PerformanceAnalyzer.php:100 |
Kodi që e kryen matjen
services/PerformanceAnalyzer.php:100— PerformanceAnalyzer::checkCacheHeadersservices/PerformanceAnalyzer.php:109— no_cache