PHP: загрузка сжатых файлов JavaScript - PullRequest
4 голосов
/ 23 марта 2011

Является ли хорошей идеей объединить набор из 20-30 файлов .js в один большой файл, сжать этот файл с помощью gzip, сохранить его как что-то вроде somebigjsfile.js.gz, а затем загрузить его как <script type="text/javascript" src="somebigjsfile.js.gz"></script>

Этот файл будет сгенерирован снова, когда хотя бы один из файлов .js был изменен (проверяя это с помощью phm's filemtime).

Также, если это актуально, это для публичного приложения.

Ответы [ 3 ]

5 голосов
/ 23 марта 2011

Я предполагаю, что вы пытаетесь сэкономить на сервере необходимость gzip-пакета javascript при каждом запросе?Если это и есть намерение, это не правильный способ сделать это.Вы должны указать, что файл передается со сжатием gzip в заголовке, например:

HTTP/1.1 200 OK
Date: Thu, 04 Dec 2003 16:15:12 GMT
Server: Apache/2.0
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control: max-age=300
Expires: Thu, 04 Dec 2003 16:20:12 GMT
X-Guru: basic-knowledge=0, general-knowledge=0.2, complete-omnipotence=0.99
Content-Length: 1533
Content-Type: text/html; charset=ISO-8859-1

уведомление Content-Encoding: gzip

В любом случае объединение и сжатие вашего JavaScript всегдахорошая идея, если вы делаете это правильно.Я также рекомендовал бы использовать некоторую форму минимизации JS перед сжатием, поскольку это улучшит ваш размер после сжатия

1 голос
/ 23 марта 2011

Да, это хорошая идея.

Я использую пользовательскую функцию php, например load_script($filename), которая добавляет этот файл в «очередь загрузки». И в конце страницы я вставляю другую функцию generate_js_script(), которая анализирует эти сценарии, находящиеся в очереди, генерирует большой файл js (я думаю, я мог бы запустить минимизатор на этом этапе) и записывает его на диск с уникальным именем файла. Функция просто генерирует тег <script>, чтобы браузер знал, как загрузить этот «большой» файл js. Таким образом, я не беспокоюсь о настраиваемых header() вызовах и других странных вещах, которые вызывали проблемы с некоторыми браузерами и их алгоритмом кэширования в прошлом.

Таким образом, я мог бы просто использовать директиву .htaccess, чтобы сообщить серверу обслужить все сжатые js-файлы (если браузер поддерживает это), поэтому мне не придется делать это в php. Хитрость в этом типе кэширования состоит не в том, чтобы перегенерировать слишком часто. Я использую какое-то хеширование, чтобы позаботиться об этом.

1 голос
/ 23 марта 2011

Я не думаю, что это хорошая идея, если вы планируете возвращать посетителей - и я полагаю, что это так, если вы разрабатываете веб-приложение. Поскольку каждый раз, когда один из ваших файлов js изменяется, вы заставляете своих пользователей загружать огромный файл.

Когда ваш пользователь заходит в ваше приложение в первый раз, он часто очень щадит, если время загрузки немного велико. Если вы покажете им хороший вводный текст, им будет что почитать и / или посмотреть, пока загружаются скрипты и различные ресурсы. Но если им придется ждать загрузки вашего огромного скрипта каждый раз, когда они возвращаются, потому что это все или ничего, это будет считаться плохим UX.

Если вам сначала не нужны все 20-30 файлов, когда пользователь загружает ваше приложение, используйте загрузчик сценариев, чтобы загрузить их в фоновом режиме.

Если вам нужны эти 20-30 файлов, попробуйте объединить их в 10 или около того файлов, пытаясь объединить те, которые с наибольшей вероятностью будут обновлены вместе.

Что касается сжатия gzip, ваш веб-сервер должен справиться с этим.

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