2016-10-02 42 views
0

如果我在CLI跑gzip的,我可以得到一个很好的压缩比:阿帕奇紧缩JavaScript的压缩比1.00倍

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

但是在Apache中,即使我把放气,它没有压缩,但同样的文件大小。下面是我的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.00倍。我把它缩小到只有js得不到压缩,取而代之的是css获得了6.22x的良好压缩比。 js文件有问题吗?

+0

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

回答

0

我明白了!

我注意到响应中没有“内容长度”标题。所以我回去检查Apache文档。它说:

DeflateBufferSize指令指定zlib应同时压缩的 片段的大小(以字节为单位)。如果压缩的 响应大小大于该指令所指定的大小,那么httpd将会切换为分块编码(设置为分块的HTTP头传输编码 ),副作用是不设置任何 内容长度HTTP标头。当httpd 工作在反向缓存代理之后或httpd配置为 mod_cache和mod_cache_disk时,这一点尤其重要,因为HTTP响应可能没有任何内容长度标头可能无法缓存。

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

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