簡體   English   中英

如果我們不支持IE6,則為IE的gzip Javascript文件有意義嗎?

[英]If we do not support IE6, does it make sense to gzip Javascript files for IE?

如果瀏覽器允許壓縮,我正在使用Django GZip中間件(django.middleware.gzip.GZipMiddleware)壓縮內容。

如果瀏覽器是Internet Explorer(MSIE),並且內容是Javascript文件,則中間件不會gzip內容。 我的理解是,在這種情況下,中間件避免了壓縮,因為IE6(無補丁)存在壓縮響應問題。

對於我們的網站,我們不支持IE6,但是我們支持IE7和IE8。 考慮到我們不支持IE6,即使瀏覽器是IE,最好的做法是gzip所有javascript文件嗎?

如果是這樣,將這些文件壓縮的​​最佳方法是什么? 我們想繼續為gzip使用Django中間件模塊。 我們是否應該復制gzip中間件模塊並編輯處理IE和Javascript的幾行內容(感覺就像我們違反了DRY)? 也可以將Apache用於gzip。

受JS / CSS上gzip問題影響的IE6版本不再普遍發行(即使在當時也是少數)。 Netscape 4很久很久沒了。

因此,我強烈建議您刪除所有現有的User-Agent-sniffing gzip hacks 根據標准HTTP / 1.1,將壓縮的HTML / JS / CSS發送到所有請求它的瀏覽器(帶有Accept-Encoding )。

if "msie" in request.META.get('HTTP_USER_AGENT', '').lower():

噢親愛的。 即使按照UA嗅探的糟糕標准,這也是一個非常糟糕的測試。 無需檢查它實際上是MSIE在字符串中的正確位置(而不是所有尾隨位的任何地方;很容易得到誤報),也不會檢查gzip測試中傳統的SV1 (作為IE6SP2 +版本)不會受到錯誤的影響),因此它可以中斷所有 IE的壓縮,而這僅僅是不必要的。

它還沒有設置Vary: User-Agent ,因此代理將緩存錯誤的版本。 並且它在不使用Content-Encoding時為IE設置了Vary: Accept-Encoding Content-Encoding ,因此它將破壞IE中的緩存

我們是否應該復制gzip中間件模塊並編輯處理IE和Javascript的幾行內容(感覺就像我們違反了DRY)?

您可以,也可以將補丁提交給Django。 因為IMO的當前做法簡直就是破門。

也可以將Apache用於gzip。

是的,如果您肯定已經在上游安裝了Apache(例如,使用mod_deflate )。 如果您也可以使用它來提供靜態文件(例如腳本)的服務,那將是最有效的。 (嘗試將JS保留在靜態腳本中,而不是即時生成/模板化。)

同樣, 不要使用 mod_deflate頁面上提到的瀏覽器嗅探規則。 它們非常脆弱和丑陋,並且正在嘗試圍繞Netscape問題進行編碼,該問題在過去十年中沒有人受到影響。

最好在可能的情況下使用壓縮。 請記住,盡管某些瀏覽器在壓縮方面很繁瑣。 如果您能夠在托管空間上使用.htaccess文件,則對瀏覽器進行簡單的條件檢查就可以產生奇跡,例如:

    </IfModule>

    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html
        AddOutputFilterByType DEFLATE text/plain
        AddOutputFilterByType DEFLATE text/xml
        AddOutputFilterByType DEFLATE text/css
        AddOutputFilterByType DEFLATE text/javascript
        AddOutputFilterByType DEFLATE application/xhtml+xml
        AddOutputFilterByType DEFLATE application/javascript
        AddOutputFilterByType DEFLATE application/x-javascript
        AddOutputFilterByType DEFLATE application/json
        AddOutputFilterByType DEFLATE application/xml
        AddOutputFilterByType DEFLATE application/rss+xml
        AddOutputFilterByType DEFLATE application/rdf+xml
        AddOutputFilterByType DEFLATE application/atom+xml

        #Netscape 4.x has issues, sort them out...

        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        Browser

Match \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

首先,我們檢查是否啟用了該模塊,設置了壓縮選項,最后整理出所有這些錯誤的瀏覽器!

由於“ Django本身不提供靜態(媒體)文件 ”,因此,最佳實踐似乎是讓Apache(或NginxCherokeelighttpd )處理javascript文件的gzip壓縮。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM