Pregunta

Estoy usando Tomcat para comprimir mi contenido HTML como este:

<Connector port="8080" maxHttpHeaderSize="8192"
maxProcessors="150" maxThreads="150" minSpareThreads="25"
maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="150" connectionTimeout="20000" disableUploadTimeout="true"
compression="on" compressionMinSize="128" noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html"
URIEncoding="UTF-8" />

En la cabecera HTTP (como se observa a través de YSlow), sin embargo, no estoy viendo

Content-Encoding: gzip

resultando en una pobre YSlow puntuación.

Todo lo que veo es

HeadersPost
Response Headers
Server: Apache-Coyote/1.1
Content-Type:   text/html;charset=ISO-8859-1
Content-Language:   en-US
Content-Length: 5251
Date:   Sat, 14 Feb 2009 23:33:51 GMT

Estoy corriendo un apache mod_jk configuración de Tomcat.

¿Cómo puedo comprimir el contenido HTML con Tomcat, y también tienen que agregar "Content-Encoding:gzip" en el encabezado?

¿Fue útil?

Solución

Tener un vistazo a http://sourceforge.net/projects/pjl-comp-filter/ .

Otras soluciones personalizadas pueden tener pérdidas de memoria.

Además, si usted está usando mod_jk continuación, que son sin duda no utiliza el conector 8080 (que soporta la compresión) para aquellas solicitudes.

Otros consejos

Tomcat va a hacer la compresión. Sin embargo, ya que está utilizando mod_jk supongo que usted está recibiendo solicitudes a través de Apache en el puerto 80 en lugar de Tomcat en el puerto 8080. Como un experimento intentar conseguir su página a través del puerto 8080 y después de comprobar yslow debería ver las cabeceras correctas.

Creo que lo que está sucediendo es que Apache es descomprimir el contenido que se está haciendo desde Tomcat a través mod_jk y luego pasar el contenido desinflado en el navegador.

Si desea utilizar mod_jk, entonces tendrá que configurar su compresión en Apache Tomcat en lugar de.

Tal vez la compresión Tomcat se está refiriendo a que no se gzip? Es una puñalada en la oscuridad, pero podría estar relacionado con la compresión de espacio en blanco, o línea de corte.

Me imagino Tomcat sería un poco más explícito en este sentido (aquí está la esperanza).

Tenemos el filtro gzip mencionado por duffmo corriendo en nuestra aplicación, el web.xml es como la siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd">

    <display-name>App-Web</display-name>

    <!-- FILTERS -->

    <!-- Gzip filter -->
    <filter>
        <filter-name>GZIPFilter</filter-name>
        <filter-class>weblogicx.servlet.gzip.filter.GZIPFilter</filter-class>
    </filter>

    [snip]    
</web-app>

Para mejorar el rendimiento del lado del cliente de la aplicación web J2EE, puede intentar WebUtilities biblioteca de java.

Aquí está el enlace :: http://code.google.com/p/webutilities/.

Proporciona filtro, etiqueta, servlet componentes de los diversos rendimiento del lado del cliente prácticas que resulten en un mayor rendimiento de la clasificación contra PageSpeed/YSlow.

Desde la versión 0.0.4 ayuda con las siguientes prácticas de ejecución.

  1. Minimizar las peticiones HTTP - puede servir a múltiples JS/CSS archivos en una petición
  2. El cliente en Caché - añade adecuada Cache-Control, Vence en la cabecera
  3. En la mosca de la JS/CSS minificación - uso de YUICompressor
  4. Compresión - compatible con sistema de 2 de compresión por gzip/desinflar/comprimir codificaciones
  5. Respuesta almacenamiento en Caché en el Servidor para evitar el reprocesamiento de recursos sin cambios
  6. Añadir la Codificación de Caracteres para que el navegador sepa de antemano

También es altamente configurable/personalización en contra de la mímica, de la dirección URL o a los Agentes de Usuario.

Yo tenía un vistazo a la documentación de Tomcat aquí: http://tomcat.apache.org/tomcat-5.5-doc/ config / http.html

Se menciona el uso de compression="force" que funcionó para mí. También dice que se puede establecer un minimum number. Esto funcionó bien para mí

<Connector port="8080" compression="256000" />

(comprimir algo más de 256 Kb)

El valor predeterminado para compressableMimeType significaba que no necesitaba ese atributo. También tenga en cuenta que no CompressionMinSize lista de atributos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top