Caching în http

Un pic despre cache

Webmasterii se confruntă de multe ori cu caching: browsere și proxy-uri, încercând să accelereze site-ul, încercați să păstrați cât mai multe documente posibil în memoria cache. Dacă deschideți o pagină a site-ului în browser-ul, apoi altul, și apoi înapoi la primul, cu mare probabilitate browser-ul va lua de pe hard disk-ul (sau chiar din memorie), unde a păstrat pagina pe prima vizită.







În mod evident, această operație este de obicei efectuată mult mai rapid decât recepționarea aceluiași document din rețea. La urma urmei, pentru a afișa pagina nu trebuie să obțineți doar codul HTML, dar pentru a pompa toate documentele legate de rețea: CSS-fișiere, imagini, script-uri, concepute ca fișiere separate, etc. Dacă te uiți în folderul cache de pe disc (pentru IE, acest folder se află de obicei aici: «C: \ Documents and Settings \ nume utilizator \ Local Settings \ Temporary Internet Files», pentru Firefox: «C: \ Documents and Settings \ numele de utilizator \ Local Setări \ Date de aplicație \ Mozilla \ Firefox \ Profiles \ _mail \ string \ default \ Cache "), veți observa câte fișiere au fost salvate de browserul dvs.

Desigur, cache-ul accelerează munca, dar pe de altă parte, memoria cache poate juca un rol negativ.

De exemplu, dacă pagina de chat este stocată în cache, utilizatorii pur și simplu nu vor vedea mesaje noi. Webmasterii consideră adesea cache-ul rău și luptă împotriva acestui rău în măsura posibilităților.

Problema cu cache-ul în Microsoft Internet Explorer

sau setarea antetului Expres la data trecută în scriptul dvs. care generează conținut XML. În PHP va fi astfel:

Verificarea memorării în cache

Cum să adăugați un nou site la FastVPS

Este ușor de văzut că, în acest exemplu, încercăm să dezactivați cache-ul de rețeta Wikipedia și să ieșim doar timpul curent.

Excelent! Faceți clic pe fișierul dvs. de testare 1.php și rețineți timpul (de exemplu, am plasat fereastra browserului lângă ceasul Windows):

Excelent! Acum, faceți clic pe butoanele browserului "Înapoi" și apoi pe "Redirecționare":

Upc! Timpul nu se schimbă. Și ce înseamnă asta? Da, doar că browser-ul ia o pagină din memoria cache. Și codul nostru enciclopedic? Da, nu funcționează!

Să trecem la sursele primare

Care este problema? Problema este utilizarea incorectă a anteturilor de răspuns. În specificația RFC2616, un întreg capitol este dedicat memorării în cache. Dar, din păcate, webmasterii nu citesc adesea specificațiile. Deci, ce se referă la acele titluri pe care tocmai le-am transferat? Să le vedem. Acest lucru este foarte convenabil pentru a face cu adăugarea la browser-ul Firefox Web Developer Toolbar. Informații. Vedeți Anteturi de răspuns (pentru IE, o unealtă similară se numește DevToolbar):

Deci, am trecut următoarele titluri:

Adică, „Dă documentul în cazul în care sa schimbat de la acea dată“, iar serverul ar trebui să răspundă sau 200 ( „Acest document, el a schimbat!“ Sau 304 „Schimbarea nu a fost.“ Dar, pentru ca aceasta să funcționeze, serverul dvs. trebuie să transmită antet Last- modificată, și nu doar să treacă, și transmite data corectă a modificărilor documentului. Dar suntem, cu propriile lor mâini, și codul enciclopedică prost distrus complet ultimele speranțe pentru ea! adică, nu numai că avem cache-ul nu este interzis, noi încă motoarele de căutare (și mai precis, ITSELF), rahat bine! La urma urmei, ai dat data CURENTA, ca data ultimele una modificări, rețineți?







Cache-Control: nu-cache, must-revalidate - este mai aproape de subiect. Este acest antet care gestionează cachingul, dar nu în sine, ci în combinație cu alții. Acum ne-am dat comanda: „de a utiliza informațiile următoare interogarea fără a re-verificare pe serverul sursă nu poate fi» (Dacă directiva nu-cache nu specifică un câmp de nume, apoi o memorie cache nu trebuie să folosească răspunsul pentru a satisface o cerere ulterioară fără revalidarea reușită cu serverul de origine). Practic, în această formă - această comandă nu este pentru browser, ci pentru serverul proxy.

Pragma: nu-cache - design învechit. Aceasta este de la vechea versiune a protocolului HTTP / 1.0. Practic, toate browserele și proxy-urile o ignoră. Deci, vedem că niciuna dintre liniile noastre de cod PHP nu a coacționat cu adevărat memoria cache. Ce ar trebui să fac? Și iată ce:

Dezactivați memorarea în cache

Re-salvați fișierul test-1.php cu noul test de nume-2.php și schimbați-l după cum urmează:

Încercați din nou să deschideți dosarul de testare // localhost / test-cache /. faceți clic pe testul nume-2.php și faceți clic pe butoanele "Înapoi", "Următorul". Timpul se schimba de fiecare data! Și acest lucru indică faptul că browserul nu ia o pagină din memoria cache atunci când merge înainte / înapoi, și o solicită din nou de la server. De fapt, de care aveam nevoie și aveam nevoie. Să vedem cuvintele răspunsului:

Aici este! Trecem două titluri:

Cache-control: no-store - pagina conține date private, nu poate fi salvată în memoria cache! (Scopul directivei fără magazin este de a împiedica eliberarea sau păstrarea accidentală a informațiilor sensibile (de exemplu, pe casete de rezervă)

Și aceste anteturi interzic cache-ul în browser. Dar este mai corect să adăugați instrucțiuni în antetul Cache-Control pentru serverele proxy (file-test-3.php):

Interzicerea practică a memorării în cache

Excelent! Acum, trebuie doar să creați un fișier .htaccess în dosarul dvs. și să scrieți următoarele în el:

Totul! Antetele necesare sunt transferate automat și nu este nevoie să scrieți în mod specific din PHP - cache-ul este deja dezactivat! Acest lucru este ușor de verificat dacă priviți la anteturile transmise când solicitați ORICE fișier din acest dosar:

Permisiunea de cache

Dar, în ciuda faptului că numărul coplesitoare de webmasteri consideră că cache-ul este un rău universal și încearcă să-l interzică (și așa cum am văzut, foarte nereușit), nu este așa! Cu interzicerea memorării în cache, forțați browserul să reîncarce paginile dvs. de fiecare dată de pe server și dacă canalul de comunicare al utilizatorului este slab, atunci acest lucru poate duce la o încetinire semnificativă în lucrul cu site-ul dvs. Nu vorbesc despre faptul că acest lucru duce la o creștere a încărcării pe serverul dvs.! Dacă pagina dvs. sau o parte a acesteia este formată din cereri din baza de date, puteți, în plus, să măriți sarcina pe serverul bazei de date, ceea ce poate afecta negativ performanța serverului dvs. în ansamblul său. Știți despre ce vorbesc, de exemplu, uitați-vă la lucrarea Odnoklassniki.ru! Unii webmasteri se laudă, afișând astfel de "statistici" în partea de jos a paginii: "Pagina este generată în 0.9 secunde, 9 interogări SQL sunt executate". Nimic, cu excepția arhitecturii absolut stupide a aplicației Web, nu arată!

Deci, haideți să încercăm să descărcați serverul din contră și să grăbiți munca utilizatorului! Și cache-ul din această afacere este unul dintre instrumentele puternice! Vă rog să-mi spuneți cât de des se schimbă pagina dvs. "Despre companie"? Sau ce se întâmplă dacă utilizatorul vă vede știrile ("Hooray! Ne-am mutat la un nou motor") ORE LATERĂ? Deci, de ce deranjează caching-ul unor astfel de pagini?

Încearcă să salvezi din nou fișierul de testare cu testul de nume-4.php și scrie în el următoarele linii:

Activați cache-ul conținutului folderului

Și puteți face fără PHP deloc. Creați un fișier .htaccess în dosar și scrieți următoarele în el:

Abilitatea de a include pagini în memoria cache va îmbunătăți în mod semnificativ viteza serverului web și va fi parțial eliberată de numeroasele apeluri repetate către aceștia. Permisiunea pentru cache pe serverul proxy este indicată în antetul antetului:

Directiva ExpiresActive privind directiva include cache-ul imaginilor, care le permite să fie descărcate mai repede când sunt redirecționate către paginile site-ului.

Directivele ExpiresByType image / jpeg "acces plus 3 zile" și ExpiresByType image / gif "acces plus 3 zile". la rândul lor, determină formatul imaginilor și perioada de timp pentru care se va efectua cache-ul. Implicit, cacherea imaginilor .jpeg și .gif se efectuează timp de 1 zi.

Rezultatul, după cum se spune, este vizibil cu ochiul liber. Mai ales este eficient să faceți pentru grafica site-ului, pentru paginile care conțin conținutul modificat rar sau pentru paginile frecvent vizitate, de exemplu, pentru pagina de start.

Numai o recomandare: debifați complet site-ul dvs. și numai apoi activați caching-ul! În caz contrar, riscați în căutarea unor greșeli de a deveni gri și complet dezamăgit de tehnologiile web. Mult noroc pentru dvs. și noroc cu caching-ul!







Articole similare

Trimiteți-le prietenilor: