Contactar con soporte

Respondemos por correo, normalmente en dos días.

Google reCAPTCHA revisa este envío frente a abusos; se transmiten datos a Google. El script se carga solo al abrir el formulario.

← Todas las entradas

Comprimir el mismo archivo cada vez

Apache comprime las respuestas al vuelo. Para una página que es distinta cada vez, es la única opción. Para una hoja de estilos que cambia una vez al mes, significa que el servidor repite el mismo trabajo para cada visitante, durante semanas, y tira el resultado cada vez. No hay ninguna caché para eso.

Medido el 19 de agosto de 2026 sobre una conexión ya establecida, con el style.css (124 kB) y el world.js (102 kB) propios de este sitio:

tiempobytes
sin compresión2,9 ms124.755
gzip, al vuelo18,1 ms34.995
brotli, al vuelo14,5 ms32.685
world.js, gzip47,9 ms38.283
world.js, brotli15,9 ms38.086

Cuarenta y ocho milisegundos de CPU, por petición, para producir un resultado idéntico byte a byte. En una Raspberry Pi eso no es un error de redondeo.

Comprimir una vez, en disco

Un paso de compilación escribe el archivo comprimido junto al original, y una regla de reescritura lo sirve cuando el navegador dice que acepta gzip. Servir un archivo ya hecho cuesta lo que cuesta servir cualquier archivo.

gzip y no brotli, por una razón aburrida: en esta máquina no hay ningún binario de brotli instalado. Los archivos salen alrededor de un 7 % más grandes de lo que los haría brotli, y el tiempo de servidor es una quinta parte de lo que cuesta brotli al vuelo. Ese intercambio valía la pena hacerlo ahora en vez de esperar a una respuesta más bonita.

La versión va en el nombre del archivo

La compilación escribe style.css.<mtime>.gz, y el ?v= del marcado es esa misma hora de modificación. La reescritura solo se dispara cuando existe un archivo con el número que coincide.

Esa disposición tiene una propiedad que merece la pena diseñar a propósito: si cambias la hoja de estilos y olvidas recompilar, el número del marcado apunta a un archivo que no existe, la reescritura no se dispara y Apache sirve el original con normalidad. El peor caso es que falte la aceleración. Una hoja de estilos caducada no puede salir. Todo esquema de caché debería contrastarse con esa pregunta — cuando falla, ¿se vuelve lento o se vuelve incorrecto?

El fallo que hubo en medio

El archivo que se sirve ya es gzip, así que no debe comprimirse otra vez de salida. La configuración ponía al principio no-gzip, que detiene uno de los dos compresores de Apache. El otro, mod_brotli, comprimía alegremente en brotli el archivo gzip terminado mientras la cabecera de respuesta seguía diciendo gzip.

Los navegadores recibían contenido ilegible. No se detectó mirando la página — se detectó sumando los bytes y encontrando un número que no tenía sentido. Hacen falta los dos, no-gzip y no-brotli, y solo uno de ellos es el evidente.

Publicidad