2010-06-16 3 views
10

Мне нужно предварительно сжать некоторые очень большие файлы html/xml/json (большие дампы данных), используя либо gzip, либо deflate. Я никогда не хочу работать с файлами без сжатия. Они настолько велики и повторяются, что сжатие, вероятно, будет работать очень хорошо, и, хотя некоторые старые браузеры не могут поддерживать декомпрессию, мои типичные клиенты не будут их использовать (хотя было бы неплохо, если бы я мог создать какой-то «эй, обновить сообщение своего браузера)Как предварительно сжать очень большие html-файлы

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

Я нашел некоторую информацию на этом сайте и другие о том, как это сделать с помощью gzip, но я задавался вопросом, может ли кто-нибудь меня навестить, как это сделать с дефлятом. Бонусные баллы за полный ответ, который включает в себя то, что должен выглядеть мой файл .htaccess, а также код командной строки, который я должен использовать (GNU/Linux) для получения оптимального сжатия. Супер бонусные баллы за ответ, который также описывает, как отправить сообщение «извините, нет файла для вас» в несовместимых браузерах.

было бы прекрасно, если бы мы могли создать тег «precompression», чтобы покрыть такие вопросы.

-Ft

+0

вы можете получить лучшие ответы от serverfault.com –

+0

Выглядит как дубликат http://stackoverflow.com/questions/75482/how-can-i-pre-compress-files-with-mod-deflate-in- apache-2-x – skaffman

+0

Это было полезно, но обсуждается только gzip и не сдувается предварительное сжатие. Он также находится в среде с рельсами, а не в php (хотя все еще apache). Сходства в сообщениях утверждают для тега precompressionn – ftrotter

ответ

8

Edit: Найдено AddEncoding in mod_mime

Это работает:

<IfModule mod_mime.c> 
<Files "*.html.gz"> 
    ForceType text/html 
</Files> 
<Files "*.xml.gz"> 
    ForceType application/xml 
</Files> 
<Files "*.js.gz"> 
    ForceType application/javascript 
</Files> 
<Files "*.gz"> 
    AddEncoding gzip .gz 
</Files> 
</IfModule> 

Документов это звучит как только AddEncoding должно быть необходимо, но я не получить, чтобы работать.

Кроме того, Lighttpd's mod_compression может сжимать и кэшировать (сжатые) файлы.

+0

Если вы можете включить код типа mime, я бы принял этот ответ, похоже, что никто не даст мне полный ответ, включая опцию deflate ... – ftrotter

+0

Будет ли это также: ' Header set Content-Encoding: deflate'? – maxwellb

0

Быстрый способ сжатия контента без дела непосредственно с moz_gzip/mod_defalte использует ob_gzhandler и модификацию заголовков (до любого вывода, посылает в браузер).

<?php 
/* Replace CHANGE_ME with the correct mime type of your large file. 
i.e: application/json 
*/ 

ob_start ('ob_gzhandler'); 
header('Content-type: CHANGE_ME; charset: UTF-8'); 
header('Cache-Control: must-revalidate'); 
$offset = 60 * 60 * 2 ; 
$ExpStr = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT'; 
header($ExpStr); 

/* Stuff to generate your large files here */ 
+0

Это делает gzip на лету. Я, но файл уже существует как html/json/xml/whatever на диске. Я полагаю, что я мог бы использовать php, подобный этому, чтобы генерировать правильные заголовки, затем эхо-файл (или эквивалент), но разве нет способа сделать это только в apache? – ftrotter

2

Для командной строки скомпилировать zpipe ZLIB в: http://www.zlib.net/zpipe.c, а затем

zpipe <BIGfile.html> BIGfile.htmlz 

, например.

Затем, используя пример Zash, настройте фильтр для изменения заголовка. Это должно предоставить вам файлы RAW deflate, которые современные браузеры probably support.

Для другого способа сжатия файлов ознакомьтесь с использованием pigz с параметрами сжатия zlib (-z) или PKWare zip (-K). Проверьте, выполняются ли эти действия с помощью Content-Encoding.

+0

О, и измените Z_DEFAULT_COMPRESSION в zpipe на Z_BEST_COMPRESSION. – maxwellb

+0

делает это «сдуть» сжатие или просто gzip? – ftrotter

+0

zpipe, по крайней мере, выкачивает. Попробуйте установить тестовый файл для сжатия pigz, я честно просто не имею тестовой среды, чтобы проверить это сам прямо сейчас. Pigz также будет сжимать быстрее, используя несколько ядер. Woo. – maxwellb

3

Если бы я был вами, я бы посмотрел на встроенное сжатие файловой системы, а не на это на уровне apache.

На solaris zfs есть прозрачное сжатие, используйте сжатие zfs, чтобы просто сжать файловую систему. Аналогично, окна могут сжимать папки, apache будет обслуживать контент, не обращая внимания на то, что он сжат на диске. У Linux есть файловые системы, которые также выполняют прозрачное сжатие.

+0

Отличный комментарий. Какая файловая система в Linux и какие-либо рекомендации по этому поводу в облачном экземпляре? Как правильно настроить заголовки (чтобы клиенты могли понять содержимое?) – ftrotter

+0

Это не так элегантно на linux, но есть модули плавких предохранителей, которые будут делать прозрачную компрессию/декомпрессию. Как и этот: http://miio.net/wordpress/projects/fusecompress/ Вам не нужно ничего делать с заголовками в apache, потому что, насколько это касается apache, они являются обычными файлами. :-) – Jubal

+2

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

Смежные вопросы