2016-10-02 41 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>