Cachování náhledů obrázků
- jtousek
- Člen | 951
V podstatě navazuji na tohle téma protože tento problém právě řeším.
Davig Grudl napsal:
Jednoznačně jsem pro líné generování a celý mechanismus spadá pod označení cache.
Důvod, proč jsem psal, že bych na to Nette\Caching nepoužil, je čistě výkonnostní. Obrázky je totiž nejlépe umístit do nějaké složky v document_root a nechat jejich stahování čistě v režii Apache. Bez PHP, bez frameworku. A nastavit nějaké pravidlo v .htaccess, které volá generátor, pokud obrázek neexistuje.
V tom generátoru samozřejmě je možné použít Nette, ale musel by se vytvořit nový ICacheStorage, který soubory cache ukládal bez metadat (tedy aby to byl čistě jen obrázek) – aby je poté už mohl číst Apache.
Teď si říkám, že napsat takový storage by možná bylo rychlejší než napsat tento post ;-)
Zatím jsem kešování v Nette nikdy nepotřeboval, takže se příliš neoreientuji v tom, jak to funguje. Ale když už bych se takovýto ICacheStorage rozhodl napsat, jak do toho zaimplementovat závislosti (jako EXPIRE, TAGS, …)? Nebo doporučujete v tomhle případě Nette\Cache raději vůbec nepoužít?
- dakota
- Člen | 148
Generovanie náhľadov obrázkov riešim až keď je náhľad potrebný – ako už bolo spomínané na https://forum.nette.org/…ledy-obrazku.
V htaccess mam:
RewriteCond %{REQUEST_URI} ^/previews/([^.]+)\.(jpg|png|gif)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /images/preview?file=%1.%2 [NE,L]
Ak náhľad neexistuje zavola sa generator a v ňom náhľad vytváram len pomocou Nette\Image.
....
$image->send($type);
$image->save($previewFile, NULL, $type);
Samotný obrázok a vytvorené náhľady sa odstraňujú pri zmazaní obrázka uživateľom, Nette\Cache pritom nepoužívam (viem aky je pôvodný obrázok a aké sú k nemu náhľady).
Pri generovaní ešte rozlišujem veľkosť náhľadov a kontrolujem či je povolená, aby sa nevytvárali zbytočne nepotrebné náhľady – používam označenie napr. 1253_300×400.jpg – kde je veľkosť 300 × 400 px.
Problem možno vidim len v zaťažení servera napr. ak by sa naraz vytvaralo väčšie množstvo ešte neexistujúcich nahľadov (napr. niekto by si napisal skript kde by umiestnil všetke náhľady) – nemám to nijako ošetrené, zatiaľ som nenašiel vhodný spôsob.
Editoval dakota (10. 11. 2010 10:02)