Tengo algunos tutoriales sobre cómo gzip un archivo css en el que se crea un archivo php público para incluir archivos css con compresión. El problema es que no puedo copiar mis archivos CSS. Estoy usando firebug como referencia y en realidad he intentado usar el mismo código para comprimir algunos javascript y lo almacena bien.Almacenamiento en caché gss css
Aquí está el código:
if(extension_loaded('zlib')){ ob_start('ob_gzhandler'); } $offset = 60 * 60 * 24 * 31; header('Content-type: text/css'); header ('Cache-Control: max-age=' . $offset . ', must-revalidate'); header ('Expires: ' . gmdate ("D, d M Y H:i:s", time() + $offset) . ' GMT'); ob_start("compress"); function compress($buffer) { // Remove Comments, White Space, End ;'s $buffer = preg_replace('#/\*.*?\*/#s', '', $buffer); $buffer = preg_replace('/\s*([{}|:;,])\s+/', '$1', $buffer); $buffer = preg_replace('/\s\s+(.*)/', '$1', $buffer); $buffer = str_replace(';}', '}', $buffer); $buffer = str_replace(' {', '{', $buffer); return $buffer; } include('global.css'); if(extension_loaded('zlib')){ ob_end_flush(); }
entonces yo soy simplemente hacer referencia a mi archivo php como un documento CSS en otras páginas. Como puede ver, he intentado agregar la edad máxima a la mezcla, que tampoco ha tenido éxito.
Aquí están las cabeceras de respuesta
Date Tue, 21 Jul 2009 19:59:19 GMT Server Apache/1.3.41 (Darwin) PHP/4.4.9 X-Powered-By PHP/4.4.9 Cache-Control max-age=2592000, must-revalidate Expires Thu, 20 Aug 2009 19:59:19 GMT Content-Encoding gzip Vary Accept-Encoding Keep-Alive timeout=15, max=93 Connection Keep-Alive Transfer-Encoding chunked Content-Type text/css
¿Hay algo que me falta, o una mejor manera de ir haciendo esto?
Gracias,
EDIT:
Un script que detecta si el archivo se ha cambiado & el envío de un 304 si no tiene, en combinación con las cabeceras adecuadas ha resuelto este problema.
Arthur
Hola Anthony, He intentado agregar Last-Modified como sugirió con la combinación de una fecha de modificación posterior y anterior sin suerte. También he enviado encabezados con un ETag & If modificado desde entonces, y todavía no está en caché ... Gracias por su respuesta, tendré todo esto en cuenta para futuras referencias y depuración. – askon
@askon: Esos no fueron los factores críticos, el problema clave es la inclusión de la directiva must-revalidate en el encabezado Cache-Control. Usar eso significa que el CSS siempre será recuperado. ¿También está utilizando la actualización de página (F5) en su prueba? Eso no probará nada, los recursos como css se vuelven a recopilar en un contexto de actualización y sin un mecanismo 304 integrado en el código que resultará en una recuperación completa del recurso. – AnthonyWJones
Lo siento, debería haber sido un poco más específico. Me hicieron quitar la línea debe revalidar, aquí está mi respuesta cabecera: http://freetexthost.com/zqbddbchvz Lo que no entiendo es que puedo trato de la misma escritura exacta, excepto en un text/javascript documento y muestra un 200 y lo almacena en caché. – askon