Ceea ce îmi place PHP, deci este pentru că lucrurile strălucitoare pe ea sunt scrise în câteva rânduri. În acest articol, voi continua să vorbesc despre utilizarea corectă a antete în PHP. Dacă îți pasă de modul în care site-ul dvs. este indexat de motoarele de căutare, dacă doriți să salvați un trafic, puteți găsi exact ceea ce ai nevoie.
Este cunoscut faptul că cache-ul browser-ul lateral reduce sarcina pe server. Dar pentru pagini actualizate frecvent are un dezavantaj major: informațiile din memoria cache poate deveni depășite și nu corespund cu informațiile actuale.
Pentru fiecare document, da un server, este de dorit a se obține din titlu Last-Modified (inclusiv indexare adecvată, de exemplu, prin Yandex):
Pentru paginile de frecvent actualizate (nu spun „dinamic“, deoarece pagina pot fi colectate de fiecare dată când interpretorul PHP, dar, de fapt schimba foarte rar), puteți dezactiva stocarea în cache următorul set de antete:
În principiu, pentru funcționarea satisfăcătoare a site-ului e suficient. Cu toate acestea, în loc de un cache complet interdicție este mai bine de a utiliza un mecanism mai flexibil, folosind If-Modified-Since antet. Acesta este prezent în browser-ul de interogare, în cazul în care acesta are o copie în cache a documentului și semnificația acestuia - unele modificări data la această copie. Un script PHP poate uita la data și va decide dacă este sau nu pentru a da o pagină de browser în stare proaspătă sau raportați că pagina nu sa schimbat, trimiterea unui răspuns 304 Nemodificată. Împreună cu trimiterea antetul Last-Modified. codul va fi:
Faptul că cele mai recente versiuni de Opera și Firefox reproduce în mod regulat conținutul antetului de răspuns de la server în antetul cerere If-Modified-Since Last-Modified (de aceea a trebuit să setați Last-Modified) testul, și o egalității ar putea face bine fără. Dar, ca întotdeauna, nu fără capriciilor IE 6. Este antetul If-Modified-Since opțiune adaugă lungime. și ceea ce este prima problemă. Acesta poate fi rezolvată cu ajutorul funcției strpos. dacă nu pentru a doua problemă - Trucuri șenilelor. Toate acestea (cu excepția robotului Rambler, care funcționează conform schemei de mai sus) a titlului If-Modified-Since (în cazul în care nu este utilizat) este transmis nu valoarea Last-Modified. și data la ultima descărcare a documentului. Într-o astfel de situație nu mai poate face fără transferul menționat data unixstamp (ceea ce face ca funcția date2unixstamp).
Dacă dezactivați stocarea în cache pagini funcționează no_cache. Opera și Firefox atunci când accesează o pagină, utilizați un mecanism de If-Modified-Since antet. și pe bună dreptate. Asta este, cache-ul este încă în desfășurare, dar browser-ul cere serverului dacă pagina sa schimbat, de fapt, sau nu. Cu toate acestea, interdicția privind cache-ul IE trebuie luat literal. In timpul experimentelor, a devenit clar că în cazul în care trei titluri no_cache elimina al doilea, versiunile IE 6 și 7 începe să lucreze ca ne-o dorim. Poate fi utilă utilizarea corectă a Expiră antet. Este posibil să se stabilească timpul în care vor fi folosite numai copia locală a documentului în cache. Această metodă face posibilă pentru a face față cu cache prea intruziv în IE. De exemplu, pentru a copia în memoria cache a fost valabilă pentru o zi, ar trebui să utilizați următoarea declarație:
Deci, cum să folosească toate aceste caracteristici ale protocolului HTTP? Antet Prelucrare If-Modified-Since util, oricum. De exemplu, Yandex recomandă utilizarea acestuia. Dacă salvați de trafic și când pagini sunt actualizate frecvent, apoi le interzice cache nu este necesar. Aveți posibilitatea să le preveni cache, atunci în loc să-l va solicita la server cu If-Modified-Since și 304 răspuns. Acest lucru va crește traficul pe care un pic, dar va permite să se obțină o statistică mai precisă: utilizator a venit la pagina, și l-am spune că pagina nu sa schimbat, dar statisticile sale să ia în considerare. În cazul în care documentele sunt actualizate frecvent, aproape întotdeauna necesar să se interzică punerea în cache a acestora. Emiterea 304 de răspuns în cele mai multe cazuri, pentru a compensa o posibilă creștere a traficului.
În plus față de metoda de mai sus pentru a testa relevanța unei copii a documentului în cache, există un alt, bazat nu pe data modificărilor de pagină, și un cod hash unic al conținutului paginii. Un nume comun pentru ambele metode - Ia condițională, puteți găsi mai multe informații despre ele.
A se vedea blog-ul
Multumesc pentru articol!
Și cum pot face o imagine Opera, emis de script-ul nu repornește, poate ajuta?
Aici este funcția mea:
În general, face pervertire, în cazul în care obiectivul dvs. - pentru a înlocui adresa URL reală a imaginii pe orice alta. Tu complica viața pentru ei înșiși și server care se va învârti script-ul.
Acest lucru poate avea sens dacă ai de fiecare dată când acesta generează o imagine diferită. Dar chiar și în această situație, este mai bine pentru a salva imaginea pe disc, și stabilește un link HTML pentru aceasta (în cazul în care imaginea va fi relevante pentru, să zicem, 100 de afișări de pagină).
Multumesc pentru raspuns rapid :)
Apropo, eu, de asemenea, așa că a decis să salvați pe imagine de disc, dar am un mod_rewrite este scris după cum urmează:
RewriteEngine on
RewriteRule ^ ([^.] +) $ Index.php
pentru a crea URL-ul frumos și am Parsa mâinile lor în scenariu. Cum să scrie că, pentru orice adresă URL deschis script index.php ca chiar acum, dar cu excepția faptului că, în cazul în care primul nivel acolo show_image, apoi într-un dosar merge în cazul în care imaginile mint.
Detaliul mod_rewrite nu am înțeles, așa că nu pot spune. Dacă aș fi în locul tău, am făcut-o redirecționare prin mod_rewrite pe diferite scenarii, în funcție de modul în care (deși nu este cea mai bună soluție).
Nimic nu se poate face cu contoare. Alege ce este mai important pentru tine: Counter liveinternet.ru sau mai puțin trafic ca vizitatorii site-ului, și pe dvs. de găzduire.
Vreau să iau în considerare utilizatorii, chiar dacă acestea dau doar titlul paginii nu este schimbat. Dacă ar fi fost propria mea contra, atunci totul este în regulă, dar dacă am folosi Li.ru? Puteți încerca, după emiterea codului 304 pentru a aplica la liveinternet.ru server și imite hit-uri ale utilizatorilor. Cu toate acestea, eu nu știu cum va funcționa. Ar fi necesar să se facă ceva de genul asta.
Este destul de interesant. Și dacă situația este că, atunci când accesează pagina prin intermediul parametrilor Ajax sunt date script-ul PCP, el face kartinuk și returnează răspunsul este ceva de genul "
. „În această situație, chiar dacă cache-ul este dezactivat, imaginea este memorată în cache de browser și nu vrea să otnovlyatsya. Ce să fac atunci?Din descrierea ta Nu înțeleg problema. Descrie în detaliu ceea ce vrei, ceea ce faci și ceea ce rezultatul este.
Dacă scriptul serverul Ajax returnează codul HTML, care are o etichetă img, și nu doriți să fie în cache, imaginea poate fi adăugat la parametrul src este neimportantă ca src = „https://written.ru/articles/technologies/site_building/ qwe.jpg? 8472 „a generat aleator.
În cazul în care o imagine este generată pe zbor, și de fiecare dată modificări în script-ul pe care le generează, este necesar să se înregistreze titluri pentru a interzice punerea în cache.
În orice caz, am verificat că emiterea de 304 de răspuns Opera, FF și IE este încărcat contra.
Am deschis o pagină care dă prima poziție: # „Last-Modified. # „Și conținutul, și apoi de fiecare dată: # 'HTTP / 1.1 304 Nemodificată #'.
Am testat totul în FireFox 3.0.6, pentru că pot vedea și antetele, și activitatea în rețea în Firebug. În ea este acest comportament.
Acum, eu nu am timp să se ocupe de această problemă. Poate atunci vom vedea.
Poate că există și alte soluții la sarcina pe care vă confruntați?
Doar o singură decizie: să plece așa cum este, bazându-se pe funcționarea corectă a memoriei cache a celor două browsere: IE și Chrome sau Firefox, Opera și Safari să înscrie.
O altă soluție - să abandoneze acest tip de memorie cache, dar atunci ai timp să dea fiecare pagină client. Sau scrieți serverul verifica dacă clientul a venit la pagina anterioară, atunci nu dau un titlu: # 'HTTP / 1.1 # 304 Nu a fost modificată', care, în sine este greșită.
Multumesc pentru articol, de altfel! Mă voi uita, dintr-o dată există o soluție :)
Funcția date2unixstamp ($ s)
reveni strtotime (substr ($ s, 5));
>
Vă mulțumesc foarte mult :) Foarte util pentru codul.
Eu nu sunt cu siguranță prea bun la toate. Mă interesează cum să o facă pe WordPress. Într-un fel este posibil? Ce cache mi imaginez slab am nevoie pentru roboți atunci când vizitează un site, la cerere, în cazul modificat, deoarece WordPress a dat la data efectivă a modificărilor de pagini. Ei bine, încă mai este de dorit ca pentru fiecare cerere mandatează modificată ultima dată. Acest lucru se poate face în wp?
Nu știu cel mai bun mod de a face prieteni și Wordpress If-Modified-Since / Dacă-Fără-Match. Vezi ce scrie despre ea alte persoane de experiment cu plug-in-uri.
De atunci, de cale ferată și este faptul că nu am găsit un astfel de plug-in. În general, cele mai multe motoare yuzayu, cu atât mai mult îmi dau seama că pufăit ar trebui să fie învățați și să scrie ceva din propriile lor.
Rănit de titlul «Pragma» nu. Pentru „glonțului“ poți pleca.
pentru mine nu este foarte frumos și nu foarte laconică codul pentru o astfel de sarcină simplă
în special atinge
die;
Dar totul este deja în PHP: