Automatizarea cache
Automatizarea cache
Caching la nivel de client și server poate accelera în mod semnificativ viteza site-ului. În acest moment, toate sistemele moderne de management al conținutului includ suport pentru cache, în unele cazuri, mai multe niveluri.
Caching la nivel de client
Setarea cache pentru a evita solicitări suplimentare din browser-ul la server este destul de simplu: trebuie doar să cunoască cazurile cele mai tipice de utilizare:
Resurse statice necomprimate
Forțarea cache pentru resurse statice, fără compresie. În acest caz, riscăm nimic, expunând nu numai timpul maxim cache, dar, de asemenea, oferind resurse cache pe un proxy local, (Directiva Cache-Control: publice). Pentru PHP, vom avea următorul cod (în data precizate în următorii 10 ani în raport cu timpul actual expiră pe server):
În cazul emiterii directivelor pentru Apache:
Și în cazul Nginx:
de viață caching în vârstă de 10 de ani, aici este complet justificată: astfel încât să informeze utilizatorii că resursele nu au nevoie de perezaprashivat în acest timp. În cazul în care resursele sunt modificate, vom avea în continuare o memorie cache pentru a accelera de relief (mai mult pe acest lucru mai jos), pentru a asigura afișarea corespunzătoare a materialelor de pe site-ul în toate browserele.
Resurse statice cu compresie
Evident, în unele cazuri, directiva poate fi combinat cu cazul precedent.
Dacă trebuie să adăugați cache pentru un anumit termen pentru HTML-documente care prevăd suficiente extensii de fișiere Directiva FilesMatch enumerate mai jos.
resurse dinamice Ban caching
De obicei, pentru un site arbitrar (informații cu privire la care se modifică frecvent) de memorare în cache document HTML este interzisă. Acest lucru se datorează învechire rapidă a informațiilor (este de remarcat faptul că regulile de afișare stiluri de informare și de interacțiune și script-uri devin depășite mult mai lent decât informațiile).
Pentru a dezactiva cache pentru toate browserele, HTML-documente, aveți nevoie pentru a scrie folosind PHP (în scris Expiră ora curentă pe server):
Resetați cache
Destul de des prin cache la nivel de client, să refuze din cauza faptului că, uneori, este dificil de controlat în mod adecvat comportamentul toate browserele în cazul unei modificări parțiale sau complete a resurselor, care sunt în cache.
șirul de interogare
De fapt, această problemă este costă destul de simplu, și în cartea „Overclocking site-ul dvs.“ a fost dat un număr de moduri de a furniza acest mecanism. Cel mai simplu mod este că putem adăuga un GET-parametru special (sau doar șirul de interogare) pentru resursa noastră. În acest caz, adresa URL se modifică în browser-ul (dar pentru serverul rămâne aceeași), care rezolvă de fapt problema.
Luați în considerare următorul apel CSS-fișier:
Dacă folosim timestamp-ul și avem, să zicem, un nume de fișier pe care dorim să includem în documentul ca o foaie de stil, următoarele PHP-cod oferă un cache unic pentru cazul nostru:
Fizică numele fișierului
Soluția de mai sus are un mic dezavantaj: Unele servere proxy nu va cache fișiere cu șirul de interogare, inclusiv dinamica lor. Putem rezolva această situație prin rescriere regulă în configurația Apache:
Ce Defineste? Iar cel care atunci când specificați în link-ul HTML-document într-un fișier
serverul va returna fișierul fizic
Așa că am ocoleste elegant problema de servere proxy pe o singură linie în configurația serverului. PHP-codul corespunzător va arata astfel:
crearea hash
După cum sa menționat deja mai sus, pentru a automatiza procesul de resetare a memoriei cache pe client de fiecare dată când avem nevoie pentru a cere sistemul de fișiere pentru modificări de fișiere. Dacă fișierele au mai multe, sarcină suplimentară crește de multe ori. Dar, ținând cont de faptul că vom fi toate combinate într-un singur fișier, putem controla într-un fel schimbarea fișierului de ieșire fără a verifica în timp ce toate îi aparțin.
Să ne uităm la exemplul dat la începutul capitolului. Putem colecta toate aparițiile cunoscute de fișiere într-un document într-o singură linie, iar apoi calcula un hash al șirului rezultat:
Deci, vom actualiza cache-ul clientului de fiecare dată când vom schimba cel puțin un apel din fișierele care formează hash. Aceasta nu rezolvă problema ridicată la începutul capitolului (avem în continuare nevoie pentru a verifica fișierul în sine, în care câteva, pentru a schimba data combinate), dar ajută pentru a rezolva o problemă similară care are loc în cadrul unor soluții generalizate pe un proiect mare.
Utilizarea memorie partajată
De fapt, soluția de probleme fizice fișier Verificator pentru a schimba pe suprafata. Pentru a face acest lucru, trebuie să ne furnizați:
- Conectarea bibliotecilor de memorie partajată (APC, eAccelerator, memcache).
- Capacitatea de a gestiona starea cache (și edita fișiere scanate prin intermediul interfeței web, o parțială a reseta cache-ul sau fișierele stocate în memoria cache hard reset).
În exemplul descris APC algoritmul este după cum urmează:
După cum se poate observa, algoritmul propus este destul de simplu (și poate fi redusă la o simplă procedură de curățare cache, atunci când am creat pentru toate fișierele combinate fortam recompilări), dar evită complet referirea la un sistem de fișiere (sau cache) atunci când acțiunea de pe pagina de optimizare a clientului.
Astfel cache la nivel de client, se poate accelera încărcarea paginilor următoare (sau vizite) în site-ul dvs. cu 80-90% (5-10 ori), precum și gestionarea corespunzătoare a cache vă asigură că informațiile primite de către utilizator, va fi întotdeauna relevante.
Caching la nivel de server
Destul de des vedem o situație în care crearea de pagini de pe server durează câteva (zeci de secunde). Analiza cauzelor tipice ale acestei și posibilele soluții la o astfel de situație nu vor fi luate în considerare (merge dincolo de cartea curentă), dar există unele metode pentru a ușura problemele paginilor „lent“. Este vorba despre cele mai simple de memorare în cache a creat document HTML.
De obicei, (în cazul de site-uri dinamice) pentru a crea HTML-pagini sunt zeci sau sute de cereri de la baza de date sunt zeci (sau sute) de diferite biblioteci conectate, și nu puteți întotdeauna trata corect cu problemele de numărul de interogări la nivelul bazei de date sau acceleratorul de compilare cod executabil (de exemplu, eaccelerator).
Pe shared hosting (atunci când resursele unui singur server poate partaja zeci sau sute de site-uri diferite) pentru un site relativ simplu (care nu implică o interacțiune semnificativă utilizator), este în valoare în considerare posibilitatea de a crea o memorie cache gata HTML-pagini. Ce este?
Revenim documentul în cache
Fiecare utilizator specific, la cerere, la server devine gata document HTML care include numai clientul (care este independent de statutul de server) dinamica, care funcționează în browserul utilizatorului (și stocate în cache), dar nu și pe server. Prin urmare, putem simula de fapt același cache-ul browser-ul numai resursele serverului.
Pentru un exemplu mai detaliat, să ia în considerare următorul cod, responsabil de cel mai simplu cache pe partea de server de optimizare a web:
Variabila $ cache_me poate fi format bazat pe o multitudine de parametri (inclusiv o parte a URL-ului, care este necesar sau nu cache, agenții de utilizator și roboți, pentru care putem da versiunile cache de pagini, etc.). De asemenea, trebuie remarcat faptul că doar a crea un fișier cu un nume egal cu adresa URL curentă a paginii nu este posibilă: găsit caractere nevalide (/.), Care ar trebui transformate atunci când salvați într-un sistem de fișiere.
Crearea unui document în cache
Dar ne-am uitat la procesul de eliberare a unui document în cache, și modul în care apare pe hard disk? Procedura de stocare a fișierelor este un pic mai ușor, și poate fi scris după cum urmează (codul de optimizare web):
resurse de pe server (folosind nici o distribuție a energiei electrice) este configurat corect punerea în cache la nivel de server este capabil de a economisi timp vizitatorii dvs. (și, prin urmare, crește conversia site-ului) și de a salva.