如果我们不支持IE6,那么为IE提供gzip Javascript文件有意义吗?

如果我们不支持IE6,那么为IE提供gzip Javascript文件有意义吗?,javascript,django,internet-explorer,gzip,Javascript,Django,Internet Explorer,Gzip,如果浏览器允许压缩,我将使用Django GZip中间件(Django.middleware.GZip.GZipMiddleware)来压缩内容 如果浏览器是Internet Explorer(MSIE),并且内容是Javascript文件,则中间件不会对内容进行gzip。我的理解是,在这种情况下,中间件避免压缩,因为IE6(没有补丁)在gzip响应方面存在问题 对于我们的站点,我们不支持IE6,但我们支持IE7和IE8。考虑到我们不支持IE6,即使浏览器是IE,对我们来说gzip所有javas

如果浏览器允许压缩,我将使用Django GZip中间件(Django.middleware.GZip.GZipMiddleware)来压缩内容

如果浏览器是Internet Explorer(MSIE),并且内容是Javascript文件,则中间件不会对内容进行gzip。我的理解是,在这种情况下,中间件避免压缩,因为IE6(没有补丁)在gzip响应方面存在问题

对于我们的站点,我们不支持IE6,但我们支持IE7和IE8。考虑到我们不支持IE6,即使浏览器是IE,对我们来说gzip所有javascript文件是否是最佳实践


如果是这样,那么将这些文件gzip的最佳方法是什么?我们希望继续为gzip使用Django中间件模块。我们是否应该复制gzip中间件模块并编辑处理IE和Javascript的几行代码(这感觉像是违反了DRY)?使用Apache for gzip也是一种选择。

如果可能,最好使用压缩。但请记住,有些浏览器在压缩方面很挑剔。如果您能够在托管空间中使用.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>

AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType泄气文本/普通
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE应用程序/xhtml+xml
AddOutputFilterByType DEFLATE应用程序/javascript
AddOutputFilterByType DEFLATE应用程序/x-javascript
AddOutputFilterByType DEFLATE应用程序/json
AddOutputFilterByType DEFLATE应用程序/xml
AddOutputFilterByType DEFLATE应用程序/rss+xml
AddOutputFilterByType DEFLATE应用程序/rdf+xml
AddOutputFilterByType DEFLATE应用程序/atom+xml
#Netscape 4.x有问题,请解决。。。
浏览器匹配^Mozilla/4 gzip纯文本/html
浏览器匹配^Mozilla/4\.0[678]无gzip
浏览器
匹配\bMSIE!没有gzip!仅限gzip文本/html

首先,我们检查模块是否已启用,设置压缩选项,最后整理所有那些糟糕的浏览器

受JS/CSS上gzip问题影响的IE6版本不再普遍流通(即使在当时也是少数)。网景4已经很久很久没有了

出于这个原因,我强烈建议删除所有现存的嗅探gzip黑客的用户代理。按照标准HTTP/1.1,将压缩的HTML/JS/CSS发送到所有请求它的浏览器(使用
接受编码

if "msie" in request.META.get('HTTP_USER_AGENT', '').lower():
哦,天哪。这是一个非常糟糕的测试,即使以UA嗅探的糟糕标准衡量也是如此。不检查它是否在字符串中的正确位置(与所有尾随位中的任何位置相反;很容易得到误报),也不检查gzip测试中传统的
SV1
(因为IE6SP2+版本不会受到错误的影响),因此,它破坏了所有IE的压缩,这是不必要的

它也不会设置
Vary:User-Agent
,因此代理将缓存错误的版本。它还设置了
Vary:在不使用
内容编码时,接受IE的编码,这样它将

我们是否应该复制gzip中间件模块并编辑处理IE和Javascript的几行代码(这感觉像是违反了DRY)

你可以,也许可以把补丁提交给Django。因为他们目前的做法根本不符合国际海事组织的要求

使用apacheforgzip也是一种选择

是的,如果你有Apache upstream,一定要使用它(例如,使用
mod_deflate
)。如果您可以使用它来服务静态文件,比如脚本,那么它将是最有效的。(尝试将JS保存在静态脚本中,而不是动态生成/模板。)

同样,不要使用
mod_deflate
页面上提到的浏览器嗅探规则。他们脆弱而丑陋,正试图围绕一个在过去十年中没有影响任何人的Netscape问题进行编码。

自“”以来,最好的做法似乎是让Apache(或)处理javascript文件的gzip压缩。

参见