How can I use gzip compression for .css and .js files on my websites?

30,469

Solution 1

AddOutputFilterByType DEFLATE text/css sets the compression to deflate, not gzip, so use filesMatch and set the Content-Encoding header to x-deflate:

<filesMatch "\.(js|css)$">
Header set Content-Encoding x-deflate
# Header set Content-Encoding compress
# Header set Content-Encoding x-gzip
</filesMatch>

If that fails, uncomment the compress line and comment the x-deflate line. gzip is not part of the standard Apache installation, so install the gzip module if deflate is not sufficient. As a last resort, create gzipped versions of your CSS and JS files.

Solution 2

I think you're missing AddOutputFilterByType DEFLATE text/javascript. Adding that fixed the issue for me.

Share:
30,469
Admin
Author by

Admin

Updated on May 23, 2020

Comments

  • Admin
    Admin almost 4 years

    I have been toiling for days to get gzip compression working on the websites I have on my shared hosting server. I've had a certain level of success but sadly .css and .js files are being left out, despite my best efforts. Since I'm using shared hosting, I have no access to the apache configuration file, so I have resorted to using my .htaccess file to achieve this.

    The site I'm currently working on is Peak Heat, running Wordpress, and below is the .haccess file I'm using:

    # compress text, html, javascript, css, xml:
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/js
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    
    ## EXPIRES CACHING ##
    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access 1 year"
    ExpiresByType image/jpeg "access 1 year"
    ExpiresByType image/gif "access 1 year"
    ExpiresByType image/png "access 1 year"
    ExpiresByType text/css "access 1 month"
    ExpiresByType application/pdf "access 1 month"
    ExpiresByType text/x-javascript "access 1 month"
    ExpiresByType application/x-shockwave-flash "access 1 month"
    ExpiresByType image/x-icon "access 1 year"
    ExpiresDefault "access 1 week"
    </IfModule>
    ## EXPIRES CACHING ##
    
    <IfModule mod_headers.c>
      <FilesMatch "\.(js|css|xml|gz)$">
        Header append Vary Accept-Encoding
      </FilesMatch>
    </IfModule>
    
    <ifModule mod_gzip.c>
      mod_gzip_on Yes
      mod_gzip_dechunk Yes
      mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
      mod_gzip_item_include handler ^cgi-script$
      mod_gzip_item_include mime ^text/.*
      mod_gzip_item_include mime ^application/x-javascript.*
      mod_gzip_item_exclude mime ^image/.*
      mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
    </ifModule>
    

    When I check the site using Firebug v1.8.3 with Google PageSpeed v1.12, it shows that the following files haven't been compressed:

    /wp-includes/js/jquery/jquery.js?ver=1.6.1

    /wp-content/themes/peak-heat/script/global.js

    /wp-content/plugins/contact-form-7/jquery.form.js?ver=2.52

    /wp-content/themes/peak-heat/style.css

    /wp-content/plugins/contact-form-7/scripts.js?ver=3.0

    /wp-content/plugins/contact-form-7/styles.css?ver=3.0

    /wp-content/plugins/testimonials-widget/testimonials-widget.css

    Checking the website URL itself with the online GIDZipTest site, it confirms that compression is enabled, but when I check the above .css and .js files, it says that they're not compressed.

    What can I do to include all .css and .js files when compressing my site?

  • user2477139
    user2477139 over 10 years
    when i use this code in my magento its css and js stop working
  • user2997826
    user2997826 about 10 years
    This worked for me :) One question, Is there any way to compress external files? Google saying "cdn1.livechat.com/mife.js" could save 14kb, but its an external file. Any idea how to load it compressed?
  • Paul Sweatte
    Paul Sweatte about 10 years
    @user2997826 If you need to compress external files, there are some similar questions which cover this, but this is CDN specific.
  • Nipun Tyagi
    Nipun Tyagi about 10 years
    @Paul Sweatte: When i have used this code in the .htaccess file then css & js don't load on the DOM. Do you have any another way to compress the js & css files ?
  • Paul Sweatte
    Paul Sweatte about 10 years
    @user1640432 There a link at the end of the answer with an alternate approach.