2

I am looking to improve front-end performance of my application, so I used YSlow tool in Firefox. When I ran this tool for my app, in the YSlow grade tab it showed up a issue 'Grade F on Compress components with gzip'. Seems to be that we need to compress the files(js, css) while sending from the server to client to increase the server response time.

My app is a Struts Java application. Can anyone let me know how to compress and send the front end UI files(JS,CSS) from server so that the response time increases and my pages lot fastly? What are the things that I need to do to compress these files in Java at server?

Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140
GURU-MVG
  • 161
  • 5
  • 13
  • What servlet container are you using ? - you can e.g. configure Tomcat to do gzip on the fly. – nos Mar 02 '10 at 10:37

5 Answers5

6

I recommend to use a Servlet Filter (since servlet 2.3 spec)

A gzip filter is well documented, so there is no need to reinvent the wheel:

Also, some servlet containers can do gzip on the fly. Take a look at this related question.

Community
  • 1
  • 1
Guido
  • 46,642
  • 28
  • 120
  • 174
2

To improve client side performance of Java EE web application, WebUtilities java library can be helpful.

Here is the link :: https://github.com/rpatil26/webutilities.

It is also available through maven central.

Since version 0.0.4 it helps with following performance practices.

  1. Minimize HTTP requests - can serve multiple JS/CSS files in one request
  2. Client Side Caching - adds proper Cache-Control, Expires header
  3. On the fly JS/CSS minification - using YUICompressor
  4. Compression - supports 2way compression for gzip/deflate/compress encodings
  5. Response Caching at Server - to avoid reprocessing of unchanged resources
  6. Add Character Encoding - to let browser know in advance
Rajendra
  • 29
  • 1
1

I recommend to use Granule Tag lib the http://code.google.com/p/granule/

It gzip and combine javascripts wrapped by g:compress tag

code sample is:

<g:compress>
  <script type="text/javascript" src="common.js"/>
  <script type="text/javascript" src="closure/goog/base.js"/>
  <script>
       goog.require('goog.dom');
       goog.require('goog.date');
       goog.require('goog.ui.DatePicker');
  </script>
  <script type="text/javascript">
      var dp = new goog.ui.DatePicker();
      dp.render(document.getElementById('datepicker'));
  </script>
</g:compress>
...

Andre
  • 11
  • 1
0

You normally configure it at appserver/servletcontainer level. I don't know which one you're using, so here's just a Tomcat targeted example. In the /conf/server.xml configure the <Connector> component as follows:

<Connector compression="on">

That's all. Just add compression="on". The other servers provides a comparable setting. consult its documentation for details. Often it's exactly the same because they're built on top of Tomcat.

For more YSlow hints in Java EE webapplication perspective you may find this blog article more useful.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • I have tried mentioned in this article http://balusc.blogspot.com/2009/02/fileservlet-supporting-resume-and.html. But YSlow still shows that the files(JS, CSS) are not sent from the server in compressed mode. Any thoughts/suggestions are appreciated. Thanks – GURU-MVG Mar 03 '10 at 06:37
  • Don't you confuse compression with minification? – BalusC Mar 03 '10 at 11:12
  • Yes i think here we need to compress the js,css files and send it to the client from server. plz point me if my understanding is wrong. – GURU-MVG Mar 03 '10 at 13:08
  • It's hard to say since I don't have access to your environment and you are apparently not able to examine/verify the working yourself. – BalusC Mar 03 '10 at 13:12
  • As i said earlier, though i compressed at server, still iam able to see 'Grade F on Compress components with gzip' in YSlow. Anyways to achieve gzip compression (JS, CSS) files from the server. – GURU-MVG Mar 04 '10 at 06:40
  • There can be lot of things the cause. Edited the wrong server.xml file, edited the wrong connector, not rebooted the server, tested with files still in browser cache, browser doesn't support compression, etc – BalusC Mar 04 '10 at 11:37
  • @BalusC: what would be the configuration for weblogic, look like? – Narayan Aug 17 '12 at 09:01
0

Are you sure you are trying to compress JS and CSS rather than trying to minify it? Generally JS and CSS are cached by the browser after the first visit provided your caching headers are set correctly by your web server. In practice I have found that minifying JS and CSS is usually good enough for the initial download by the browser.

There are many JS minifiers. For example one is located here.

CoolBeans
  • 20,654
  • 10
  • 86
  • 101