Как сделать ссылку на сжатый javascript в html-документе?

Я видел ряд ссылок на сжатие javascript для экономии времени загрузки. Но Я также вижу ряд предупреждений о том, что некоторые браузеры не поддерживают это.

В моем распоряжении два разных метода:

  1. используйте mod_deflate, чтобы Apache сжимал файлы JS / CSS в заданном каталоге через htaccess
  2. используйте ob_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, когда у меня его, вероятно, нет.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
6
0
10 536
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Наилучший способ добиться этого - поддержать сервером встроенный gzip. Вы должны убрать ".gz" из атрибута src тега скрипта и сохранить файл на сервере в несжатом виде. Если клиент поддерживает это, сервер автоматически отправит сценарий в виде результата в формате gzip. Это стоит вашему серверу некоторого дополнительного процессора, но файл сжимается для тех клиентов, которые его поддерживают, в то время как более старые клиенты по-прежнему получают расширенную версию.

Проверьте mod_deflate для apache2. mod_gzip является эквивалентом Apache 1.x.

Я посмотрел на mod_deflate в целом, но забыл, что на моем сервере только Apache 1.3. Итак ... это разрушает эту идею!

Robert K 09.10.2008 21:07

Эквивалент для apache 1.3 - mod_gzip

nsayer 09.10.2008 21:15
Ответ принят как подходящий

И 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.)

Robert K 09.10.2008 22:01

Я считаю, что вы сможете просто проверить пользовательский агент на наличие "MSIE 6.0"

Owen 09.10.2008 22:14

о, забыл добавить, что это тривиальная задача для подмены пользовательского агента, но я предполагаю, что большинству пользователей ie6 это все равно не понравится: RewriteCond% {HTTP_USER_AGENT}! ". * MSIE 6 \ .0. *" должен работать

Owen 09.10.2008 22:15

Если браузер правильно настроил заголовок Accept-Encoding, вы сможете определить, поддерживает ли браузер gzip:

Accept-Encoding: gzip,deflate

Другие вопросы по теме