Javascript 如何对我网站上的 .css 和 .js 文件使用 gzip 压缩?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7704624/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 03:15:56  来源:igfitidea点击:

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

javascriptcssapachecompressiongzip

提问by zxon

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.

我已经工作了好几天才能在我的共享托管服务器上的网站上使用 gzip 压缩。我已经取得了一定程度的成功,但遗憾的是 .css 和 .js 文件被排除在外,尽管我尽了最大努力。由于我使用的是共享主机,我无法访问 apache 配置文件,因此我使用我的 .htaccess 文件来实现这一点。

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

我目前正在使用的网站是Peak Heat,运行 Wordpress,下面是我正在使用的 .haccess 文件:

# 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:

当我使用 Firebug v1.8.3 和 Google PageSpeed v1.12 检查站点时,它显示以下文件尚未压缩:

/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

/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 GIDZipTestsite, it confirms that compression is enabled, but when I check the above .css and .js files, it says that they're not compressed.

使用在线 GIDZipTest站点检查网站 URL 本身,它确认已启用压缩,但是当我检查上述 .css 和 .js 文件时,它说它们没有被压缩。

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

压缩我的网站时,我该怎么做才能包含所有 .css 和 .js 文件?

回答by Paul Sweatte

AddOutputFilterByType DEFLATE text/csssets the compression to deflate, not gzip, so use filesMatchand set the Content-Encodingheader to x-deflate:

AddOutputFilterByType DEFLATE text/css将压缩设置为deflate,而不是gzip,因此使用filesMatch并将Content-Encoding标头设置为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 compressline and comment the x-deflateline. gzip is not part of the standard Apache installation, so install the gzip moduleif deflate is not sufficient. As a last resort, create gzipped versions of your CSS and JS files.

如果失败,请取消注释该compress行并注释该x-deflate行。gzip 不是标准 Apache 安装的一部分,因此如果 deflate 不够用,请安装gzip 模块。作为最后的手段,创建 CSS 和 JS 文件的 gzip 版本

回答by Nandan Sawant

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

我想你失踪了AddOutputFilterByType DEFLATE text/javascript。添加它为我解决了这个问题。