# Apache MyFaces Core Concepts - Whitespace Compression

MyFaces Core provides a feature to minimize the additional white spaces in a HTML page to reduce its size.
Usually the code generated by Renderers does not contains unnecessary spaces, but the code that comes directly from HTML markup in facelets comes straight from the xhtml or xml file used.

The trick behind this feature is enable/disable it as a do inside facelets compiler option.
Just add this into your `faces-config.xml` file:

```xml
<?xml version="1.0"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
              version="2.2">
    <faces-config-extension>
        <facelets-processing>
            <file-extension>.xhtml</file-extension>
            <process-as>xhtml</process-as>
            <oam-compress-spaces>true</oam-compress-spaces>
        </facelets-processing>
    </faces-config-extension>
</faces-config>
```

That's it.  
Now, facelets compiler will try to reduce or remove spaces/tabs when they are not necessary, following the rules for HTML white space compression, to avoid change the appearance of the page.  
In simple words, this means when necessary it replace multiple continuous spaces with just one or remove all of them. It also try to use '\n' characters when possible, to make easier read the page markup once compressed.

Since this optimization is done in facelets compiler, the effort to reduce white spaces is just done once, so all your pages will not impose additional CPU or memory overhead.
So it reduce the memory and CPU resources required to render a page, so this can give a little boost to your application.

