PHP rychlá práce s obrázky Mozektevidi.net - Píše Olda Šálek.

PHP rychlá práce s obrázky

Dnes jsem objevil obrovskou výkonovou ztrátu v souboru 404.php. Jak rychle přečíst a poslat na výstup soubor obrázku? Srovnání metod ImageCreateFromPNG, header a file_get_contents. Poslání obrázku na výstup přes PHP.

image of PHP rychlá práce s obrázky

Výkon není zadarmo

Od jisté doby vím, že výkon není zadarmo a taky vím, že výkon není nekonečný. Se systémovými prostředky by se mělo šetřit. Když jsem koupil web patrikvogl.cz, zjistil jsem, že na ftp chybí spousty obrázků. Při načtení stránky je vidět spousty křížků informujích o chybějícím obrázku. Toho jsem se chtěl zbavit a proto jsem si vytvořil skript, který mi místo chybějícího obrázku podstrčí obrázek chybový (404.png).

$obrazek = ImageCreateFromPNG('css/404.png');
header('Content-Type: image/png');
imagepng($obrazek);
imagedestroy($obrazek); 

Skript byl hotový, víc jsem neřešil. Skript funguje. To jsem ještě nic netušil o optimalizaci PHP skriptů. Zjišťuji přes program ab (apache benchmarking), že 1000 *10 spuštění skriptu trvá neuvěřitelných 40sekund.

Řešení nevymýšlel dlouho, napadlo mne ihned.

header("Location: ".HOME.'404.png');
header("Connection: close");
die('nenalezeno'); // presmerovani proste nestaci. skript nesmi pokracovat dale

Prostě požadavek elegantně přepošlu na chybový obrázek. Stejným postupem jsem testnul rychlost přesměrování. Provedení skriptu 1000*10 krát trvá „jen“ 3,4 sekund. To by se dalo považovat za úspěch, ale mě napadlo ještě jedno řešení. Místo přesměrování budu otevírat klasický jako soubor.

$img = file_get_contents('404.png');
header('Content-Type: image/png');
echo $img;

Můj poslední skript je ještě o třetinu rychlejší. Trvá jen 2,1 sekund. S toho nelze než nemít radost :).


autor článku Oldřich Šálek | datum publikování 31.květen.2008 19:53 | služby a články co mohou být užitečné služby |

Kometáře


Komentáře a diskuze ke článku tady
diskuze ke článku