![](/img/trans.png)
[英]JavaScript Error “Object does not support this property or method” in IE6
[英]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(或Nginx , Cherokee或lighttpd )處理javascript文件的gzip壓縮。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.