Collapse Whitespace

Configuration

The 'Collapse Whitespace' filter is enabled by specifying:

Apache:
ModPagespeedEnableFilters collapse_whitespace
Nginx:
pagespeed EnableFilters collapse_whitespace;

in the configuration file.

Description

The 'Collapse Whitespace' filter reduces bytes transmitted in an HTML file by removing unnecessary whitespace.

Operation

The filter reduces the transfer size of HTML files by replacing contiguous whitespace with a single whitespace character. Because HTML is often formatted with extra whitespace for human readability or as an incidental effect of the templates used to generate it, this technique can reduce the number of bytes needed to transmit HTML resources.

For example, if the HTML document looks like this:

<html>

  <head>
    <title>Hello,   world!   </title>
    <script> var x = 'Hello,   world!';</script>
  </head>

  <body>
    Hello, World!
    <pre>
      Hello,
        World!
    </pre>
  </body>

</html>

Then PageSpeed will rewrite it into:

<html>
<head>
<title>Hello, world!</title>
<script> var x = 'Hello,   world!';</script>
</head>
<body>
Hello, World!
<pre>
      Hello,
        World!
</pre>
</body>
</html>

Example

You can see the filter in action at www.modpagespeed.com on this example.

Requirements

The 'Collapse Whitespace' filter will not modify whitespace appearing within <pre>, <textarea>, <script> and <style>. Extraneous whitespace within inline scripts and styles can be removed using the JS Minify and CSS Minify filters.

The 'Collapse Whitespace' filter will attempt to preserve newline characters to an extent -- a contiguous sequence of whitespace with at least one newline anywhere in it will always collapse to a single new line. Why? See the collapse newlines entry in the FAQ.

Risks

Although contiguous whitespace in HTML (beyond the first space) is normally ignored by the browser outside of tags like <pre> and <textarea>, one can use CSS properties such as "white-space: pre" to make the browser preserve whitespace within a portion of the document: compare this example with and without the filter enabled.

Use of such properties is relatively rare, however, the 'Collapse Whitespace' filter is not yet CSS-aware, so any pages that might use such CSS properties (either statically or dynamically) should not use this filter at this time.