Question

J'utilise Tomcat pour compresser mon contenu HTML comme ceci :

<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" />

Dans l'en-tête HTTP (comme observé via YSlow), cependant, je ne vois pas

Content-Encoding: gzip

ce qui entraîne un mauvais score YSlow.

Tout ce que je vois c'est

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

J'utilise une configuration Apache mod_jk Tomcat.

Comment puis-je compresser le contenu HTML avec Tomcat et lui demander également d'ajouter "Content-Encoding :gzip" dans l'en-tête ?

Était-ce utile?

La solution

Jetez un oeil à http://sourceforge.net/projects/pjl-comp-filter/ .

D'autres solutions personnalisées peuvent avoir des fuites de mémoire.

En outre, si vous utilisez mod_jk alors vous n'êtes certainement pas utiliser le connecteur 8080 (qui prend en charge la compression) pour ces demandes.

Autres conseils

Tomcat va faire la compression. Cependant, parce que vous utilisez mod_jk Je suppose que vous vous obtenez des demandes via Apache sur le port 80 au lieu de tomcat sur le port 8080. A titre d'expérience essayer d'obtenir votre page via le port 8080, puis vérifier yslow vous devriez voir les en-têtes corrects.

Je pense que ce qui se passe est que apache est décompressé le contenu qu'il reçoit de tomcat par mod_jk et en faisant passer le contenu dégonflé sur le navigateur.

Si vous souhaitez utiliser mod_jk alors vous devrez configurer votre compression sur Apache Tomcat plutôt que.

Peut-être la compression Tomcat fait référence à n'est pas gzip? Il est un coup de poignard dans l'obscurité, mais il pourrait se rapporter à la compression de l'espace blanc ou parage ligne.

J'imagine Tomcat serait un peu plus explicite à cet égard (ici espère).

Nous avons le filtre gzip mentionné par duffmo en cours d'exécution dans notre application, le web.xml ressemble à quelque chose comme ceci:

<?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>

Pour améliorer les performances globales côté client de l'application Web J2EE, vous pouvez essayer la bibliothèque Java WebUtilities.

Voici le lien :: http://code.google.com/p/webutilities/.

Il fournit des composants de filtre, de balise et de servlet pour appliquer diverses pratiques de performances côté client, ce qui entraîne des performances plus élevées par rapport à PageSpeed/YSlow.

Depuis la version 0.0.4, il permet de suivre les pratiques de performances.

  1. Minimiser les requêtes HTTP - peut servir plusieurs fichiers JS/CSS en une seule requête
  2. Mise en cache côté client - ajoute un en-tête Cache-Control et Expires approprié
  3. Minification JS/CSS à la volée - en utilisant YUICompressor
  4. Compression - prend en charge la compression bidirectionnelle pour les encodages gzip/deflate/compress
  5. Mise en cache des réponses sur le serveur - pour éviter le retraitement des ressources inchangées
  6. Ajouter un codage de caractères - pour informer le navigateur à l'avance

Il est également hautement configurable/personnalisation par rapport à MIME, URL ou User-Agents.

J'ai eu un coup d'œil à la documentation Tomcat ici: http://tomcat.apache.org/tomcat-5.5-doc/ config / http.html

Il mentionne en utilisant compression="force" qui a fonctionné pour moi. Il dit aussi que vous pouvez définir un minimum number. Cela a bien fonctionné pour moi

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

(compresser quoi que ce soit sur 256Kb)

La valeur par défaut pour compressableMimeType signifiait que je ne l'ai pas besoin de cet attribut. Notez également qu'il ne liste pas l'attribut CompressionMinSize.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top