Can someone help me with a Perl or dynamic module to strip of whitespaces & comments from html responses in nginx?
-
Could you please explain your case a little more?– quantaOct 26, 2011 at 6:29
-
my html contains a lot of whitespace noise and html comments. This adds up to payload. if you look at view-source:google.com you'll see that google is stripping the whitespace noise. Wanted to achieve something similar.– Quintin ParOct 26, 2011 at 6:43
-
1Are there any specific problems in rebuilding nginx? Lack of permissions or knowledge?– CyclopsNov 4, 2011 at 12:28
4 Answers
This should be done at deploy time as a preprocessing step, otherwise you will be wasting cpu cycles each time you serve content.
Looks like there's a module to strip whitespace (not comments apparently)
As Ochoto already said, this should be done at deploy, or better, at render time. Because sometimes you might have spaces (non- ) which are needed in order to display the page correctly. If you do this at a later stage, you can run into troubles (it can also work)
Anyway, if payload-size is your issue, have a look at compression. This will produce far better results in my opinion.
This can be extremely tricky!
You should not only be aware of <pre>
tags, but consider stuff like this:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<text x="0" y="15" xml:space="preserve">hello world</text>
</svg>
Your post-processor would really need to parse the content and understand it. A simple regular expression will surely mess things up sooner or later.
As Cohoto and Franz Bettag have mentioned, this should aether be done in the source or as a pre-deployment step and not as a post-processing fix-up.
For javascript there are some obfuscators or compressors available that safely remove whitespace, parse the script and shorten all variables to single letters etc, knowing what they are doing since they know the context. However I've yet to see a know-it-all xhtml compressor that implements all that an average browser can handle. It is possible to build one that ignores anything it does not recognize though, but would it really be worthwhile?