如果我们不支持IE6,为IE浏览Jzip文件是否有意义?

时间:2010-08-03 10:53:51

标签: javascript django internet-explorer gzip

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

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

对于我们的网站,我们不支持IE6,但我们支持IE7和IE8。考虑到我们不支持IE6,即使浏览器是IE,我们最好还是gzip所有的javascript文件吗?

如果是这样,获取这些文件的最佳方法是什么?我们想继续使用Django中间件模块进行gzip。我们是否应该制作gzip中间件模块的副本并编辑处理IE和Javascript的几行(这感觉就像我们会违反DRY)?使用Apache进行gzip也是一种选择。

3 个答案:

答案 0 :(得分:5)

受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在字符串中的正确位置(与所有尾随位中的任何位置相对;容易得到误报),并且它不会检查传统的SV1对于gzip测试(因为IE6SP2 +版本不受bug的影响),所以它打破了所有 IE的压缩,这是不必要的。

它也没有设置Vary: User-Agent,因此代理会缓存错误的版本。并且在不使用Vary: Accept-Encoding时为IE设置Content-Encoding,因此它将break cacheing in IE

  

我们是否应该制作gzip中间件模块的副本并编辑处理IE和Javascript的几行(这感觉我们会违反DRY)?

你可以,也许可以将补丁提交给Django。因为他们目前的方法是IMO完全被打破。

  

使用Apache进行gzip也是一种选择。

是的,如果你有Apache上游肯定使用它(例如。mod_deflate)。如果您可以使用它来提供脚本等静态文件,那么效率最高。 (尝试将JS保存在静态脚本中,而不是在运行中生成/模板化。)

同样,不要使用 mod_deflate页面上提到的浏览器嗅探规则。他们是脆弱和丑陋的,并试图编写一个在过去十年中影响到没人影响的网景问题。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

自“Django itself doesn’t serve static (media) files”以来,最佳做法似乎是让Apache(或NginxCherokeelighttpd)处理gzip压缩javascript文件。