Ubuntu és PHP megoldások

Érdekességek, trükkök, tudni valók Ubunturól és PHP-ról

Hogyan gyorsítótárazzuk a PHP-val generált képeket?

2011.05.29. 10:10 gH0StArthour

Sokan nem gondolnak ilyesmire, pedig elég fontos dolog.

A webszerver, esetünkben Apache2 dinamikus oldalgenerálásokra van optimalizálva, ezért fontos, hogy minél kevesebbszer kelljen neki újra és újra generálnia egy-egy képet.

Sok oldalon (nagyobbakon) megfigyelhető, hogy például a statikus elemeket külön webszerver, akár külön szerver szolgálja ki az oldal alatt.

Ennek oka szintén az, hogy a „Fő webszerver” ami a dinamikus tartalmat szolgálja, erre lett optimalizálva, míg általában a statikus részeket kiszolgáló webszerver le van butítva, így nem is lenne képek akár PHP-t futtatni.

Míg esetünkben adott egy akár általunk átméretezett kép, akár egy általunk generált kép (PHP GD, PHP Imagemagick stb...), amely rosszabb esetben minden meghíváskor újra és újra generálja a képet, ezzel a webkiszolgálót nyúzva.

Minden kép generálás ugyanis erős lemez, memória és processzor használatot igényel, legyen az egy egyszerű átméretezés (nagy képről kicsire stb... ) vagy egy bonyolultabb kép effekt, bármi. Ez nem jó senkinek sem.

Ezért jön a kérdés... Miért nem használjuk ki, hogy az oldalt látogatónk böngészője már egyszer lementette a képet a gyorsítótárába... ?

Az elv:

Kedves látogatónk, először jár az oldalon és mondjuk a galériánkat óhajtja megtekinteni, amely 3MB-os képeinket tartalmazza. De mi nem akarjuk elsőre a 2000x3000 pixeles képeinket betölttetni vele, így azt átméretezzük 200x300px-re. Egy oldalon mondjuk 50 kép, és mindezt átméretezni egyszerre?

Kész örökké valósággá válhat. Ekkor jön a böngésző, ami elsőre menti ezeket a már átméretezett képeket. De látogató barátunk még egyszer meg akarja nézni, frissíti az oldalt. Megint várhat sok ideig.

Szóljunk a böngészőnek, hogy „hé haver, ez a kép nálad egyszer már le van mentve!”.

A böngésző mindig küldi, hogy ő mikor látta utoljára azokat a média elemeket.

$_SERVER['HTTP_IF_MODIFIED_SINCE']

Gyakorlat:

$file = 'kep.jpg';

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) AND (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) > filemtime($file))) {

header('Last-Modified: '.gmdate('D, d M Y H:i:s', $lm).' GMT',true, 304);

exit;

}

Tehát, ha a böngésző értesít minket, hogy neki ez megvan, akkor értesítsük arról, hogy változott-e azóta.

De honnan jön a kep.jpg, ha generált a kép?

Onnan, hogy érdemes megcsinálni még azt, hogy amikor méretezzük a képet a látogatónknak, mi azt sunyiban le is mentjük átméretezve. És legközelebb megkívánja valaki azt nézni kis méretben, akkor már az jelenik meg, mert létezik, plusz hogy a kis képet se kelljen folyton oldalhívásonként beolvasni, megnézzük és elküldjük a böngészőnek, h mikor változott utoljára.

Íme egy élő példa. Ezzel egy URL-en megadott óriás képet méretez át, ment egy thumb mappába, majd legközelebb már a böngészőnek szól, hogy mikor változott utoljára.


 

Szólj hozzá!

Címkék: firefox php hálózat php5 ubuntu php4 generál kép gyorsítótárazás

A bejegyzés trackback címe:

https://phpubuntu.blog.hu/api/trackback/id/tr792940409

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása