- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果浏览器允许压缩,我正在使用 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 也是一种选择。
最佳答案
受 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+ 版本不会受到该错误的影响),因此它会破坏所有 IE 的压缩,这是不必要的。
它也不会设置Vary: User-Agent
,因此代理将缓存错误的版本。当不使用 Content-Encoding
时,它会为 IE 设置 Vary: Accept-Encoding
,因此它会 break cacheing in IE .
Should we make a copy of the gzip middleware module and edit the few lines that deal with IE and Javascript (this feels like we would be violating DRY)?
你可以,也许可以将补丁提交给 Django。因为在我看来,他们目前的方法完全被打破了。
Using Apache for gzip is also an option.
是的,如果您有 Apache 上游,那么一定要使用它(例如使用 mod_deflate
)。如果您也可以使用它来提供脚本等静态文件,那么它是最有效的。 (尝试将 JS 保留在静态脚本中,而不是即时生成/模板化。)
再次强调,不要使用mod_deflate
页面上提到的浏览器嗅探规则。他们脆弱而丑陋,并试图围绕过去十年中没有影响到任何人的 Netscape 问题进行编码。
关于javascript - 如果我们不支持 IE6,那么为 IE 压缩 Javascript 文件是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3395805/
我有一张 table People (First_Name, Last_Name)。此表包含与示例中一样重复的记录(并非所有行都重复): First_Name Last_Name John
我用 Java 编写过很多程序,之前也涉足过 C++。我在各种 C++ 书籍中阅读了有关指针的内容,并完成了书籍中的各种示例。 我了解指针的基础知识,但有一件事我一直不清楚。指针在现实世界中的应用是什
线 .Mappings(m => m.FluentMappings.AddFromAssemblyOf() 它有什么作用?它会在派生自 ClassMap 的 Product 类的程序集中查找任
我有用于打印数字的自定义打印功能。我制作了一个 ASCII 版本和一个 UTF-16LE 版本。 UTF-16LE 版本对 0-9 使用全角代码/字符,对十六进制使用 A-F。在调试我的函数时,我注意
这是我的代码片段: float ab(float); 以后 if(ab(temp)
我在一个项目文件中包含以下代码: //begin of the file ((window) => { 'use strict'; class View extends GSM.Event
我一直在到处寻找关于 ? 用法的正确解释。和 *。我注意到我可以使用以下方法拒绝所有用户的访问: 如果我想允许某个组,我应该在其上方添加下一行: 但是当我看到人们使用 ? 时,我开始忘记什么意思,
我正在关注 melon js tutorial .这是在我的 HUD.js 文件的顶部。 game.HUD = game.HUD || {} 我以前在其他例子中见过这个。 namespace.some
我正在处理一个包含数千行代码的文件。我正在第 700 行实现一个算法。我经常不得不离开这些行来检查文件中的其他方法。 导航回到我实际编码的地方通常很痛苦。如果我可以在第 700 行设置一个航路点并为其
我遇到了这段代码 do { if (higherQuality && w > targetWidth) { w /= 2; if (w &
uint8_t * const LCDMem = (uint8_t *) &LCDM3; 此代码在 msp430fg4618 培训套件中用于 lcd 配置。谁能解释一下上述代码的含义? 它允许使用 a
上下文 阅读一些内核代码。 问题 我不明白这行是什么意思 *(void **) &(int[2]){0,PAGE_SIZE}; 还有更多,这是什么意思 {0,PAGE_SIZE} 对我来说,它看起来不
我正在查看 Underscore.js 的源代码库,专门用于 map方法(该页面第 85 行左右,并复制到此处): _.map = function(obj, iterator, context)
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我是一名优秀的程序员,十分优秀!