GZIP, Apache, PHP: что я должен знать, чтобы реализовать на зрелом сайте? - PullRequest
3 голосов
/ 02 ноября 2010

Apache 2.2.17 PHP 5.3.3

В настоящее время мое приложение не использует gzip, но я бы этого хотел. Однако я не уверен в нескольких вещах:

  1. Я знаю, что IE6 имеет проблемы с ним; нет необходимости возвращаться сюда.
  2. Какие преимущества / недостатки есть у реализации этого в Apache (mod_deflate) по сравнению с PHP? Они в основном дают одинаковый результат? Я предполагаю, что Apache будет более эффективным, это правильное предположение?
  3. Приложение генерирует довольно много типов ответов: pdf, xml, zip, xls, csv, изображения (см. Следующий пункт) и, конечно, обычный материал типа AJAX.
  4. Я видел, что многие примеры предпочитают не распечатывать изображения, почему это так? Это связано с предположением, что большинство изображений уже находятся в сжатом формате, или это связано с тем, что они являются двоичными данными? Я создаю некоторые изображения динамически и обслуживаю другие статически.
  5. Я также транслирую аудио файлы (wav, mp3) через механизм PHP; есть здесь какие-нибудь ошибки?

По сути, если вы внедрили gzip на зрелом сайте и столкнулись с проблемами, я бы хотел знать, что это было, и что вы сделали, чтобы решить эти проблемы. Спасибо!

Ответы [ 2 ]

5 голосов
/ 02 ноября 2010
  1. Больше нечего сказать

  2. Сделайте это в Apache, это легко настроить и не требует никаких изменений в вашем коде. Вы также можете легко настроить его для сжатия файлов CSS и JS, если хотите.

  3. Apache можно настроить для сжатия только определенных типов файлов

  4. Сжатие уже сжатого файла почти всегда приводит к увеличению размера файла. Если у вас есть несжатые изображения, такие как bmps, вы получите лучшие результаты, используя технику сжатия, специфичную для изображений, чем использование gzip, поэтому вам лучше просто конвертировать их в gif, png, jpg в зависимости от ваших потребностей.

  5. Я не уверен насчет потоковой передачи, но то же самое относится и к изображениям для аудио. Если он уже сжат, не сжимайте его снова, а если нет, используйте технику сжатия, специфичную для данного типа.

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

1 голос
/ 02 ноября 2010

Кроме bmp (если вы видите, что кто-то использует их по проводам, подготовьте дробовик), изображения в основном уже сжаты, включая jpeg, png и gif.

Я использую это в своих статических поддоменах, скомпилированных из некоторых онлайн-ресурсов (которые можно легко найти в Google):

# Insert filter
<FilesMatch "(?i)^.*\.(js|css|html?|php3?|xml|txt)$">
    SetOutputFilter DEFLATE
</FilesMatch>
# *.cache.js and *.cache.css files are only checked after 6 month (e.g. jQuery.1.4.2.cache.js)
<FilesMatch "(?i)^.*\.(cache)\.(js|css)$">
    FileETag None
    ExpiresActive On
    ExpiresDefault "access plus 6 month"
</FilesMatch>
#AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
#SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary

Единственное, что я добавил, это то, что я кэширую файлы * .cache.js и * .cache.css в течение 6 месяцев, поскольку они редко меняются. Например. jqueryui.cache.css

...