Predmemoriranje stranica, CDN-ovi i baneri privole: kako izbjeći posluživanje pogrešnog stanja privole
Brze stranice, pogrešna privola
Predmemoriranje stranica jedno je od najboljih stvari koje možete učiniti za brzinu i troškove hostinga. Ujedno je i jedan od najlakših načina da se postava privole pokvari a da to ne primijetite. Predmemorija radi točno ono što mu se kaže: odgovor pohrani jednom i poslužuje ga svima koji odgovaraju istom ključu. Ako taj pohranjeni odgovor sadrži bilo što specifično za izbor privole ili lokaciju jednog posjetitelja, idući posjetitelj to dobiva također.
Ovaj vodič obuhvaća slojeve predmemoriranja koji se obično nalaze ispred stranice izdavača — CDN edge predmemorije, dodatke za predmemoriranje cijelih stranica, reverse proxyje, service workere i sam preglednik — i kako svaki od njih spriječiti da poslužuje pogrešno iskustvo privole.
Temeljno pravilo: držite privolu izvan predmemoriranog HTML-a
Najsigurnija arhitektura renderira predmemoriranu HTML stranicu kao neutralnu u pogledu privole. Stranica sadrži CMP loader i vaše tagove u blokiranom stanju ili stanju čekanja, ali bez odluke o ovom konkretnom posjetitelju. CMP zatim radi u pregledniku, čita pohranjeni izbor, odlučuje hoće li prikazati baner i sukladno tome oslobađa tagove.
Problemi počinju kad poslužitelj donosi odluke o privoli u trenutku renderiranja, na primjer:
- tema ili dodatak koji ispisuje oglasne ili analitičke tagove samo kad je prisutan kolačić privole;
- poslužiteljski kod koji izostavlja markup banera za posjetitelje koji su već odabrali;
- predlošci koji ugrađuju stanje privole posjetitelja u varijablu inline skripte.
Kad se takva stranica predmemorira, stanje prvog posjetitelja postaje stanje svih. Posjetitelj koji je odbio praćenje može dobiti stranicu s već aktivnim tagovima, ili novi posjetitelj možda nikad ne vidi baner jer predmemorirana kopija potječe od nekoga tko ga je već zatvorio.
Zašto “Vary: Cookie” rijetko rješava problem
Udžbeničko rješenje za sadržaj po posjetitelju jest reći predmemorijama da variraju po zaglavlju kolačića. U praksi posjetitelji nose mnogo kolačića s jedinstvenim vrijednostima, pa variranje po cijelom zaglavlju kolačića obično spušta stopu pogodaka predmemorije gotovo na nulu. Neki CDN-ovi omogućuju da ključ predmemorije izgradite od jedne vrijednosti kolačića, što je izvedivo ako vaš kolačić privole ima mali broj mogućih stanja, ali dodaje složenost i i dalje množi broj predmemoriranih kopija. Premještanje odluke u preglednik jednostavnije je i održava predmemoriju učinkovitom.
Geografija na edgeu
Mnogi izdavači prikazuju različite banere po regiji: opt-in baner za EU i UK, obavijest o odjavi za američke savezne države i nešto lakše drugdje. Ako poslužitelj bira varijantu na temelju IP adrese posjetitelja i ta se stranica predmemorira, europski čitatelj može dobiti predmemoriranu američku stranicu, ili obrnuto.
Tri obrasca to izbjegavaju:
- Geolokacija na strani klijenta. Neka CMP odredi regiju u pregledniku, tako da predmemorirani HTML ostaje isti za sve.
- Zemlja u ključu predmemorije. Ako morate odlučivati na edgeu, uključite u ključ predmemorije šifru zemlje koju pruža vaš CDN. Dobivate jednu predmemoriranu kopiju po zemlji, što je predvidljivo.
- Nepredmemorirana edge logika. Pokrenite regionalnu odluku u edge funkciji koja ubacuje malu, nepredmemoriranu vrijednost u inače predmemoriranu stranicu.
Koji god odaberete, dokumentirajte ga. Geografski bugovi među najtežima su za reprodukciju, jer se javljaju samo kod posjetitelja na jednom mjestu koji slučajno dobiju stranicu koju je predmemorirao netko na drugom.
Predmemoriranje samog CMP skripta
Dugo predmemoriranje CMP loadera dobro je za performanse, ali ima cijenu kad se konfiguracija mijenja. Ako ažurirate dobavljače, svrhe ili tekst banera, a skripta ili konfiguracijska datoteka predmemorirane su godinu dana, neki posjetitelji i dalje će vidjeti staru verziju. Provjerite kako vaš CMP verzionira datoteke: naziv datoteke ili parametar verzije koji se mijenja omogućuje agresivno predmemoriranje uz trenutno uvođenje promjena. Također potvrdite da vaš CDN ne uklanja query stringove iz URL-ova skripti trećih strana ako se CMP na njih oslanja.
Service workeri i izvanmrežne predmemorije
Stranice sa slojem progresivne web aplikacije često predmemoriraju HTML u service workeru. Vrijedi isto pravilo: nikad ne pohranjujte stranicu koja odražava konkretnu odluku o privoli. Isključite endpointe povezane s privolom i stranice centra za postavke iz predmemoriranja service workera i pobrinite se da se svježa CMP konfiguracija uvijek može dohvatiti.
Predmemorija back/forward
Moderni preglednici drže nedavno posjećene stranice u memoriji kako bi gumb za povratak odmah vratio stranicu. Ako posjetitelj otvori centar za postavke na jednoj stranici, povuče privolu pa pritisne natrag, vraćena stranica možda i dalje ima tagove koji rade od ranije. Slušajte događaj pageshow i provjerite njegovo svojstvo persisted: kad se stranica vraća iz ove predmemorije, ponovno pročitajte pohranjeno stanje privole i zaustavite ili pokrenite tagove sukladno tome.
Rutina testiranja
- Učitajte stranicu u čistoj sesiji, odbijte, zatim učitajte drugu stranicu i potvrdite da se nijedan tag za praćenje ne pokreće.
- Ponovite s drugim čistim preglednikom i potvrdite da se baner pojavljuje, čime se dokazuje da nije nestao zbog predmemoriranja.
- Provjerite zaglavlja odgovora da vidite poslužuju li se stranice iz predmemorije i usporedite HTML s kolačićem privole i bez njega — trebao bi biti identičan.
- Testirajte iz najmanje dvije regije nakon pražnjenja predmemorije, a zatim ponovno kad se predmemorija zagrije.
- Povucite privolu, upotrijebite gumb natrag i provjerite zaustavljaju li se tagovi.
Ključni zaključci
- Predmemorirani HTML treba biti neutralan u pogledu privole; neka CMP odlučuje u pregledniku.
- Izbjegavajte variranje po cijelom zaglavlju kolačića; to uništava stopu pogodaka.
- Ako se baneri razlikuju po regiji, odlučujte na strani klijenta ili dodajte zemlju u ključ predmemorije.
- Verzionirajte CMP datoteke da dugi rokovi predmemoriranja ne odgađaju promjene konfiguracije.
- Obradite service workere i predmemoriju back/forward te testirajte sa zagrijanom predmemorijom, a ne samo nakon pražnjenja.