WebLogic Server, application web, compression HTML et … déception.

Dans le guide d’optimisation des applications web, Oracle propose entre autres, d’activer la compression des templates HTML.
Celle-ci permet de supprimer les espaces non significatifs dans les pages afin d’en réduire le poids et donc le temps de transfert sur le réseau.

Cette optimisation, qui ne mange pas de pain, souffre d’un léger défaut qu’il convient de connaitre avant de l’activer.

En effet, le code java derrière cette optimisation ne procède pas à une analyse du texte qu’il est en train d’optimiser, ou du moins d’essayer. Le code JavaScript embarqué dans la page HTML est lui-même traité lors de l’optimisation. Malheureusement, ça se passe pas toujours bien et le code JavaScript peut se trouver détérioré par l’optimisation. En clair, il ne fonctionne plus. Une paille…

Un petit exemple
<script language="javascript">
function test() {
	var s = "";
	<%
	for (int i=0; i<5 ; i++)
	{
	%>
		// le commentaire qui va bien
		s = s + i;  
	<%
	}
	%>
}
</script>

Bon, j’avoue le code est loin d’être clean mais c’est du vécu chez les clients. Utilisation de scriptlets + code javaScript embarqué = code pas terrible. Mais bon c’est la réalité. Petite précision, le code est issue d’une JSP.

Voici le code généré SANS la compression des templates HTML :

Code généré avec la compression HTML désactivée
<script language="javascript">
function test() {
	var s = "";
	
		// le commentaire qui va bien
		s = s + i;  
	
		// le commentaire qui va bien
		s = s + i;  
	
		// le commentaire qui va bien
		s = s + i;  
	
		// le commentaire qui va bien
		s = s + i;  
	
		// le commentaire qui va bien
		s = s + i;  
	
}
</script>

Voici le code généré AVEC la compression des templates HTML :

Code généré avec la compression HTML activée
<script language="javascript">
function test() {
	var s = "";
	
	// le commentaire qui va bien	s = s + i;	
	// le commentaire qui va bien	s = s + i;	
	// le commentaire qui va bien	s = s + i;	
	// le commentaire qui va bien	s = s + i;	
	// le commentaire qui va bien	s = s + i;	
}
</script>

Ca se passe de commentaire…

Le problème concerne les versions 11g et 12c, du moins pour celles que j’ai testé.

Le code javaScript utilisé par une page HTML mais chargé via une balise <script src= »… »> n’est pas concerné.

Contacté sur ce sujet, Oracle avance l’argument que l’optimisation ne concerne QUE les pages HTML exemptes de tout code javaScript : Work as designed.

La documentation ne mentionne évidement pas cette « petite » contrainte.

Conclusion, si vous avez besoin de faire subir une cure d’amaigrissement à vos pages utilisez la compression GZip, soit au niveau du serveur HTTP soit au niveau des serveurs WebLogic (nouveauté 12c)

Bon code.