Если мы не поддерживаем IE6, имеет ли смысл архивировать файлы Javascript для IE? - PullRequest
2 голосов
/ 03 августа 2010

Я использую промежуточное программное обеспечение Django GZip (django.middleware.gzip.GZipMiddleware) для сжатия содержимого, если браузер допускает сжатие.

Если браузер Internet Explorer (MSIE), а содержимое - файл Javascriptто промежуточное ПО не передает содержимое.Насколько я понимаю, в этом случае промежуточное программное обеспечение избегает сжатия, потому что IE6 (без исправлений) имеет проблемы с gzipped ответами.

Для нашего сайта мы не поддерживаем IE6, но мы поддерживаем IE7 и IE8.Учитывая, что мы не поддерживаем IE6, было бы лучше для нас сжать все файлы javascript, даже если браузер IE?

Если это так, каков наилучший способ получения этих файлов в сжатом формате?Мы хотели бы продолжить использовать модуль промежуточного программного обеспечения Django для gzip.Должны ли мы сделать копию модуля промежуточного программного обеспечения gzip и отредактировать несколько строк, касающихся IE и Javascript (такое чувство, что мы нарушаем DRY)?Также возможно использование Apache для gzip.

Ответы [ 3 ]

5 голосов
/ 03 августа 2010

Версии IE6, на которые влияют проблемы с gzip в JS / CSS, более не распространены (и даже в то время были в меньшинстве). А Netscape 4 давно ушел.

По этой причине я настоятельно рекомендую удалить все существующие gzip-хаки, взломанные User-Agent . Отправьте сжатый HTML / JS / CSS всем браузерам, которые его запрашивают (с Accept-Encoding), в соответствии со стандартом HTTP / 1.1.

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

О, дорогой. Это действительно плохой тест, даже по мрачным стандартам UA-сниффинга. Не нужно проверять, что он действительно MSIE в нужном месте в строке (в отличие от любого места во всех конечных битах; легко получить ложные срабатывания), и он не проверяет SV1, что было традиционно для теста gzip (поскольку ошибка IE6SP2 + не может быть затронута ошибкой), поэтому она нарушает сжатие для всех IE, что просто не нужно.

Он также не устанавливает Vary: User-Agent, поэтому прокси-серверы будут кэшировать неправильную версию. И он устанавливает Vary: Accept-Encoding для IE, когда не используется Content-Encoding, поэтому он нарушит кеширование в IE .

Должны ли мы сделать копию модуля промежуточного программного обеспечения gzip и отредактировать несколько строк, касающихся IE и Javascript (такое чувство, что мы нарушаем DRY)?

Вы можете и, возможно, отправить патч Django. Потому что их нынешний подход - ИМО просто сломан.

Также возможно использование Apache для gzip.

Да, если у вас есть Apache upstream, определенно используйте это (например, с mod_deflate). Это наиболее эффективно, если вы можете использовать его для обслуживания статических файлов, таких как скрипты. (Старайтесь поддерживать JS в статических скриптах, а не генерировать / создавать шаблоны на лету.)

Опять же, не используют правила прослушивания браузера, упомянутые на странице mod_deflate. Они хрупкие и уродливые и пытаются решить проблему Netscape, которая никого не затрагивала в последнее десятилетие.

1 голос
/ 03 августа 2010

Скорее всего, было бы целесообразно использовать сжатие везде, где это возможно, да. Имейте в виду, однако, что некоторые браузеры суетливы, когда дело доходит до сжатия. Если у вас есть возможность использовать файл .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>

Сначала мы проверим, включен ли модуль, задаем параметры сжатия и, наконец, разберем все эти плохие браузеры!

0 голосов
/ 03 августа 2010

Поскольку " Django сам по себе не обслуживает статические (мультимедийные) файлы ", может показаться, что лучше всего использовать Apache (или Nginx , Cherokee или lighttpd ) обрабатывают сжатие gzip файлов javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...