Ahoj,
řeším na svém prvním větším projektu cachování, nevím, jestli jsem se vydal správnou cestou – třeba v GCH vše parádní, ale ve firefoxu to je bída.
<?php
$cached_filename = md5($_GET['page']);
$time_diff = time() - filemtime('cache/' . $cached_filename);
if (file_exists('cache/' . $cached_filename) && $time_diff <= $config['cache_lifetime']) {
// read from cache dir
include ('cache/' . $cached_filename);
exit;
} else {
// get data from DB, render page
file_put_contents(...);
}
?>
V Chromu vše funguje parádně, web se načítá z 0.00 nic, zatímco firefox (ostatní prohlížeče jsem zatím nezkoušel) načítá všechny obrázky a styly pokaždé znovu (odpadlo jen načítání z DB, ale jaksi nepracuje cache browseru?)
Asi bych to dělal tak, že všechny CSS a obrázky v nich by měly za názvem nějaký timestamp (styles.css?stamp=1234) – jde nějak říct: pokud je stamp stejný jako minule, sáhni do cache, jinak načti znovu?
Nebo je jiná cesta?
Děkuji
Na to jsou http hlavičky http://www.slideshare.net/…g-strategies
Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHub | CMS Kdyby
Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni
HosipLan – to jsem si myslel, můžeš být prosím konkrétnější? V tomhle se moc nevyznám, někde jsem našel tohle, ale nefunguje to… Tedy, ve Firefoxu, v Chromu ano.
<?php
$expiry = 60; // to se nekde naplnuje, kazdopadne je to INT, je jedno, jakou ma aktualne hodnotu
header('Accept-Encoding: gzip;q=1.0, deflate;q=0.5');
header("Pragma: public");
header("Cache-Control: max-age=".$expiry + 3600 * 24);
header('Expires: '.gmdate("D, d M Y H:i:s",time() + $expiry + 3600 * 24).' GMT');
$the_date = GetModifiedDate();
header('Last-Modified: ' . gmdate('D, d M Y H:i:s',$the_date) . ' GMT');
?>
Editoval malchic (25. 12. 2011 16:57)
CDN?
Neříkám, že by to neměl mít na starost weberver nebo CDN (?), nikdy jsem s cachí nepracoval (vlastně jsem spíše grafik než programátor).. Můžeš být prosím konkrétní, pokud víš jak? Článků o cachování jsem našel spoustu, ale řešilo se to vždy na úrovni PHP takto, jak jsem postnul výše – přes nastavení několikera headerů.
Zkus se podívat na tento článek o zrychlení webu, nebo posledně taky vyšlo něco o mod_pagespeed na zdrojáku.