Способ сжать файлы, такие как CSS, Javascript, один раз и сохранить их для обслуживания клиенту вместо обработки и сжатия каждый раз, когда делается запрос - PullRequest
2 голосов
/ 13 августа 2010

Я считаю, что это был бы более дружественный к процессору метод, может ли он быть реализован с помощью php? Вместо того, чтобы сжать содержимое для каждого запроса, я сжимаю файлы один раз и обслуживаю их вместо этого =).

Ответы [ 2 ]

3 голосов
/ 13 августа 2010

Да, это довольно легко сделать с Apache.

Храните несжатые и сжатые файлы рядом. E.g.:

\-htdocs
  |-index.php
  |-javascript.js
  \-javascript.js.gz

Включить согласование содержимого в Apache. Использование:

Options +MultiViews

Теперь, когда запрашивается «/ javascript», Apache будет обслуживать версию gzipped, если клиент объявит, что принимает ее (через Accept-encoding).

Пример двух HTTP-запросов (некоторые заголовки опущены):

Клиент утверждает, что принял gzip

GET /EP/Exames/2006-2007/exame2B HTTP/1.1
Host: lebm.geleia.net
Accept-Encoding: gzip, identity

HTTP/1.1 200 OK
Date: Fri, 13 Aug 2010 16:22:59 GMT
Content-Location: exame2B.nb.gz
Vary: negotiate,accept-encoding
TCN: choice
Last-Modified: Sun, 04 Feb 2007 15:33:53 GMT
ETag: "0-c9d-428a84de03a40;48db6d490abee"
Accept-Ranges: bytes
Content-Length: 3229
Content-Type: application/mathematica
Content-Encoding: gzip

‹áüÅE
(response continues)

Клиент не претендует на прием gzip

GET /EP/Exames/2006-2007/exame2B HTTP/1.1
Host: lebm.geleia.net
Accept-Encoding: identity

HTTP/1.1 200 OK
Date: Fri, 13 Aug 2010 16:23:14 GMT
Content-Location: exame2B.nb
Vary: negotiate,accept-encoding
TCN: choice
Last-Modified: Sun, 04 Feb 2007 15:33:53 GMT
ETag: "0-257f-428a84de03a40;48db6d490abee"
Accept-Ranges: bytes
Content-Length: 9599
Content-Type: application/mathematica

(************** Content-type: application/mathematica **************
CreatedBy='Mathematica 5.2'
(response continues)

Смотрите более полную версию здесь http://pastebin.com/TAwxpngX

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

Да, это разумный подход для экономии пропускной способности и подключения. (При желании вы можете включить сжатие gzip в Apache, но в любом случае это стоит сделать, если вы сохраняете соединения.)

По сути, используйте функцию PHP, чтобы проверить, поддерживает ли браузер сжатие gzip. (Если вам не нужно извлекать JavaScript / CSS как обычно.) Если это так, вы можете просто указать исходное местоположение JavaScript или CSS на скрипт PHP, который отвечает за:

  1. Проверка наличия сжатой версии на месте. (Просто выведите существующий «на диск», если он есть.)

  2. Создание сжатой версии необходимых файлов.

Вы также, вероятно, захотите включить / отключить это в конфигурации config / top level (для целей тестирования и т. Д.). В качестве рекомендации вы можете хранить необходимые пути файлов CSS / JavaScript в наборе массивов, использоваться в качестве основы для создания файла кэша или включения файлов традиционным способом в качестве запасного варианта.

В прошлом я писал решение по этим направлениям, которое создавало файл на основе хэша требуемых имен файлов. Таким образом, кэш был автоматически перестроен, если был добавлен другой / дополнительный файл. (Он также перестроил кэш после 'n' часов, но это только для того, чтобы все обновлялось, если имена файлов не изменились, а содержимое изменилось.)

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