PHP și Web. Caching.
PHP și Web. Caching.
Introducere.
Pentru a cache sau nu?
Abilitatea de a salva în cache-ul paginii este determinată de dinamica informațiilor din sursa de date. Astfel, necesitatea de a utiliza cache-ul este determinată de dvs., pe baza duratei de viață planificate a paginii.
Când vine vorba de selectarea eșantionului pentru baza de date (de exemplu, căutarea de cuvânt introdus de utilizator), atunci această pagină asigurați-vă că pentru a cere de la server la fiecare apel, fără a utiliza un cache, deoarece numărul de cuvinte solicitate pe care doriți este foarte mare, iar dacă avem de a face cu schimbarea o serie de date, atunci cache-ul nu are sens. Sau este vorba de formarea de vizitatori presupun programul vine (care se schimbă cu fiecare vizită, care este, practic, cu fiecare apel), apoi cache-ul este pur și simplu dăunătoare.
Cu toate acestea, dacă vorbim despre același grafic, dar ieri, este recomandat cache-ul, deoarece acestea nu vor mai fi schimbat și ne putem și resursele de utilizator și de timp pentru a încărca salva aceste pagini prin plasarea lor într-o memorie cache locală sau partajat. Ca o continuare a acestei situații, formarea programului nu este în timp real, ci pe oră. Aici puteți anticipa în prealabil data de expirare a "datei de expirare" a datelor generate.
Principiile generale de salvare a paginilor în memoria cache.
Un program PHP poate controla caching-ul rezultatelor sale prin crearea câmpurilor suplimentare în antetul HTTP al răspunsului apelând funcția Header ().
Mai multe declarații generale sunt caracteristice nu numai pentru programele PHP:
- Paginile transferate prin POST nu sunt salvate niciodată în memoria cache.
- Paginile solicitate de GET și conținând parametrii (în URL există un "?") Nu sunt stocate în memoria cache, dacă nu se specifică altceva.
Astfel, în majoritatea situațiilor, nu este necesar să adăugați instrucțiuni suplimentare la program. Principalele puncte pe care trebuie să le acordați atenție pot fi reduse la două:
- Interzicerea memorării în cache a documentelor stocate în mod implicit în memoria cache
- cache documente care nu sunt memorate în cache în mod implicit.
Împiedicați memorarea în cache a documentelor memorate în cache în mod implicit
Această problemă apare pentru script PHP se numește fără parametri, sau este directoarele de index, dar generează datele personale în conformitate cu utilizatorul (de exemplu, pe baza cookie-uri sau agent utilizator) sau de lucru, pe baza datelor care se schimbă rapid. Conform specificației HTTP / 1.1, putem gestiona următoarele domenii:
Cachearea documentelor care nu pot fi stocate în cache în mod implicit
O problemă inversă poate părea absurdă la prima vedere. Cu toate acestea, în această situație există o nevoie. În plus față de simpla minimizare a traficului în timpul dezvoltării unui program bazat pe web, trebuie să țineți cont de confortul utilizatorului în lucrul cu acesta. De exemplu, unele pagini ale serverului dvs. se formează pe baza datelor statice de volum mare. Abilitatea de a le include în memoria cache va îmbunătăți în mod semnificativ viteza serverului pentru utilizator și vă va elibera parțial de numeroasele generații repetate ale unei astfel de pagini. Titlu care permite salvarea pe servere proxy:
-
header ("Cache-control: public");
Caching înainte de expirarea corectitudinii
Soluțiile descrise mai sus sunt destul de simple, deși sunt potrivite pentru majoritatea problemelor. Protocolul HTTP / 1.1 are însă mijloacele de a ajusta memoria cache a paginilor și există sarcini care necesită utilizarea acestor mecanisme. De exemplu, aplicațiile web care funcționează cu date de volum mare și dinamism previzibil. Corectitudinea datelor poate fi stabilită atât de data actualizării prognozate, cât și de modificarea conținutului. În aceste cazuri, sunt utilizate anteturi de gestionare a cache-ului.
Caching cu o actualizare previzibilă
Caching prin conținut
ceea ce înseamnă că prin reguli pagina nu va fi salvată în cache (există parametri), dar o puteți gestiona prin antet.-
mysql_connect ("gazdă", "utilizator", "passwd");
$ image = mysql ("db", "selectați pics, tip din imagini unde id = $ id");
Header ("Cache-Control: public, must-revalidate");
Antet ("Vary: Content-ID");
Antet ("Content-ID:" .md5 (mysql_result ($ image, 0, "pics"))));
Antet ("Tip de conținut:" .mysql_result ($ image, 0, "type"));
echo mysql_result ($ imagine, 0, "pics");
mysql_freeResult ($ imagine);
mysql_close ();
Note pentru Apache rusesc
Și un mesaj plăcut (sau neplăcut) pentru utilizatorii Apache rusesc. Deoarece serverul emite cod vechi folosind codificarea personalizată, acesta oferă automat toate paginile (nu doar cele dinamice) cu anteturi care interzic cache-ul.-
Expiră: Joi, 01 Jan 1970 00:00:01 GMT
Deci, toate paginile nu sunt memorate în cache. Formarea în antetul scriptului Exprese nu are efect. De ce se face acest lucru și unele metode de luptă sunt descrise în apache.lexa.ru și nu este nevoie să reproduceți aceste sfaturi aici. Având în vedere lucrul de PHP + Apache rusesc este modul în care puteți afecta caching-ul.
Pentru scripturile care afișează imagini, situația este simplă - Apache-ul rusesc nu recodează (deci nu stabilește data de expirare) cu imaginea de tip MIME / *. Pentru a utiliza cache-ul de documente text, ar trebui să utilizați probabil "Cache-control: private, max-age =" pentru a permite cache-ul paginilor din browser. Deși aceasta este o ipoteză teoretică, nu este testată în practică.