Tips: Trimma JSP med Ant

Har följt diverse inlägg på sistone där man diskuterar hur man kan öka prestanda vid laddning av webbapplikationer. Ofta handlar det om att minska renderings- och transmissionstiden av HTML-sidorna. Många känner säkert till tekniken att komprimera resultatet och skicka en gzip:ad HTML till browsern att packa upp. De allra flesta moderna browsers stödjer detta även om det finns rapporter om problem med CSS och Javascript och då man kör SSL.

I Javavärden kan man bl.a välja att lägga det som ett Filter (se t.ex detta färdiga exempel) eller som en plugin till Apache (mod_gzip).

En doldis i prestandasammahanget är att helt enkelt i ett förkompileringssteg i Ant köra en target som tar bort alla ickesemantiska whitespace i JSP-sidorna.

En enkel användning i en build.xml-fil kan se ut så här:

<?xml version="1.0"?>
<target name="jsp.trim">
    <echo>Trim JSPs from non semantic whitespace...</echo>
    <replaceregexp match="&gt;\s\s+&lt;"
                   replace="&gt; &lt;" flags="g" byline="false">
        <fileset dir="${some.jsp.root.dir}" >
        <include name="**/*.jsp"/>
            <exclude name="**/some-excluded-file.jsp"/>
        </fileset>
    </replaceregexp>
    <echo>Done JSP trim!</echo>
</target>

Mina erfarenheter är att ovan i en traditionell JSP-webbapplikation bantar bort 30-45% av den renderade HTML-sidan. Det bästa är att det sker under compile time istället för runtime! Det innebär att renderingen av onödiga blanksteg, med automatik, går snabbare och transmissionen till webbläsaren också går snabbare. Blankstegen har ju ofta syftet att göra HTML-koden mer läsbar under utveckling, men detta är av mindre intresse när systemet är testat och produktionssatt.

Att tänka på:

  • Om man har JSP som innehåller <pre>– eller <textarea>-taggar så påverkas ju förstås dessa av trimningen. Man kan då antingen förfina filtret eller exkludera dessa filer.
  • Om du genererar något annat än HTML i en JSP, så kan ju blanksteg ha en semantisk betydelse.
  • Prova runtime-kompression. Det kan vara ett alternativ eller ett komplement till JSP-trimning.
  • Rigorösa tester före produktion. Det kan finnas dolda effekter för vissa browsers.

Tack till Niels Ull Harremoës för erfarenheter och pitfalls