【问题标题】:Apache deflate javascript compress ratio 1.00xApache deflate javascript 压缩率 1.00x
【发布时间】:2016-10-02 01:31:44
【问题描述】:

如果我在 CLI 中运行 gzip,我可以获得很好的压缩率:

bundle.js:     75.3% -- replaced with bundle.js.gz

但在 Apache 中,即使我设置了 deflate,它确实会压缩,但文件大小相同。以下是我的 Apache 配置:

LoadModule deflate_module libexec/apache2/mod_deflate.so
<IfModule deflate_module>
  DeflateCompressionLevel 9
  AddOutputFilterByType DEFLATE application/javascript text/plain text/css
  CustomLog /var/log/deflate_log DEFLATE
</IfModule>

以下是回复:

ETag    "8342b-53dc33d01d2c0-gzip"
Server  Apache/2.4.23 (Unix)
Content-Type    application/javascript
Last-Modified   Sat, 01 Oct 2016 01:00:35 GMT
Date    Sun, 02 Oct 2016 01:14:20 GMT
Connection  Keep-Alive
Vary    Accept-Encoding
Accept-Ranges   bytes
Keep-Alive  timeout=5, max=98
Content-Encoding    gzip
Transfer-Encoding   Identity

网络传输大小和以前一样,比例是1.00x。我把它缩小到只有 js 没有被压缩,而 css 得到了 6.22x 的良好压缩率。 js文件有问题吗?

【问题讨论】:

  • 其实是 Safari 误导了我。我在 Chrome 中打开了相同的页面,可以看到它以正确的大小成功压缩。只有 Safari 网络检查器显示不正确的信息。 Safari 显示它是压缩的,但比例为 1.00 倍,这是不正确的。

标签: apache gzip


【解决方案1】:

我明白了!

我注意到响应中没有“content-length”标头。所以我回去检查Apache文档。它说:

DeflateBufferSize 指令指定缓冲区的大小(以字节为单位) zlib 一次应该压缩的片段。如果压缩 那么响应大小大于此指令指定的大小 httpd 会切换到分块编码(HTTP header Transfer-Encoding 设置为 Chunked),副作用是不设置任何 内容长度 HTTP 标头。这在 httpd 时尤为重要 在反向缓存代理后面或配置 httpd 时工作 mod_cache 和 mod_cache_disk 因为 HTTP 响应没有任何 Content-Length 标头可能未缓存。

由于我的 js 文件是 500k,远远超过了默认的 8k 设置,所以我在 conf 文件中添加了以下内容,现在一切都很好:

<IfModule deflate_module>
  SetOutputFilter DEFLATE
  AddOutputFilterByType DEFLATE application/javascript text/plain text/css
  DeflateBufferSize 8096000
</IfModule>

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 2010-12-12
    • 2010-12-24
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多