Я видел ряд ссылок на сжатие javascript для экономии времени загрузки. Но Я также вижу ряд предупреждений о том, что некоторые браузеры не поддерживают это.
В моем распоряжении два разных метода:
mod_deflate, чтобы Apache сжимал файлы JS / CSS в заданном каталоге через htaccessob_start('gzhandler') для сжатия файла и возврата его в браузер с правильными заголовками.Проблемы с методом 1 заключаются в том, что не все браузеры поддерживают mod_deflate, и я понятия не имею, как написать файл .htaccess, чтобы быть достаточно умным, чтобы приспособиться к этому.
Проблема с методом 2 заключается в том, что нет однозначного ответа о том, как определить, поддерживает ли браузер сжатый с помощью gzip скрипт или таблицу стилей, и что если он это делает, то какой тип mime должен быть указан в качестве типа содержимого в заголовке.
Мне нужен совет. Во-первых, какой метод более приемлем для браузеров? Во-вторых, как мне распадаться, используя любой из методов, чтобы предоставить несжатый сценарий резервного копирования? В-третьих, будет ли <script src = "js/lib.js.gz" type = "text/javascript"></script> работать сам по себе? (Очевидно, он не распадется.)
Для записи, я использую PHP5 с возможностью создания mod_deflate и полным gzip, а мой тип документа - xhtml strict. Кроме того, сам javascript сжат с помощью YUI. Редактировать: Я только что вернулся и посмотрел, но у меня только Apache 1.3; Я думал, что у меня их 2, так что извините за упоминание mod_deflate, когда у меня его, вероятно, нет.






Наилучший способ добиться этого - поддержать сервером встроенный gzip. Вы должны убрать ".gz" из атрибута src тега скрипта и сохранить файл на сервере в несжатом виде. Если клиент поддерживает это, сервер автоматически отправит сценарий в виде результата в формате gzip. Это стоит вашему серверу некоторого дополнительного процессора, но файл сжимается для тех клиентов, которые его поддерживают, в то время как более старые клиенты по-прежнему получают расширенную версию.
Проверьте mod_deflate для apache2. mod_gzip является эквивалентом Apache 1.x.
Эквивалент для apache 1.3 - mod_gzip
И mod_deflate, и gzhandler php основаны на zlib, так что в этом смысле для браузера нет большой разницы в том, как сжимается контент.
в ответ на ваше первое беспокойство вы можете установить специфичную для модуля информацию .htaccess следующим образом:
<IfModule mod_deflate.c>
# stuff
</IfModule>
в ответ на ваше второе беспокойство вы можете определить поддержку браузера в PHP:
if (strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') ) {
ob_start('ob_gzhandler');
header("Content-Encoding: gzip");
// etc...
}
вот некоторый непроверенный .htaccess, который должен иметь возможность обрабатывать согласование сжатых и несжатых файлов .js: (источник)
<FilesMatch "\.js.gz$">
ForceType text/javascript
Header set Content-Encoding: gzip
</FilesMatch>
<FilesMatch "\.js$">
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !".*Safari.*"
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*)\.js$ \.js.gz [L]
ForceType text/javascript
</FilesMatch>
Вы знаете, как изменить проверку пользовательского агента, чтобы узнать, IE6 или ниже? Я хочу отправить IE6- в стандартный JS файл. (По-видимому, они придирчивы к gzip до IE6 SP2 и IE7.)
Я считаю, что вы сможете просто проверить пользовательский агент на наличие "MSIE 6.0"
о, забыл добавить, что это тривиальная задача для подмены пользовательского агента, но я предполагаю, что большинству пользователей ie6 это все равно не понравится: RewriteCond% {HTTP_USER_AGENT}! ". * MSIE 6 \ .0. *" должен работать
Если браузер правильно настроил заголовок Accept-Encoding, вы сможете определить, поддерживает ли браузер gzip:
Accept-Encoding: gzip,deflate
Я посмотрел на mod_deflate в целом, но забыл, что на моем сервере только Apache 1.3. Итак ... это разрушает эту идею!