Как предварительно сжать очень большие файлы HTML

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

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

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

было бы прекрасно, если мы могли бы создать тег "предварительного сжатия" для покрытия вопросов как это.

- FT

10
задан ftrotter 16 June 2010 в 11:02
поделиться

4 ответа

Редактировать: Найдено AddEncoding в 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 , но я не заставил это работать.

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

8
ответ дан 3 December 2019 в 23:48
поделиться

Быстрый способ сжать содержимое, не работая напрямую с 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
ответ дан 3 December 2019 в 23:48
поделиться

На вашем месте я бы посмотрел на сжатие встроенной файловой системы вместо того, чтобы делать это на уровне apache.

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

3
ответ дан 3 December 2019 в 23:48
поделиться

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

zpipe < BIGfile.html > BIGfile.htmlz

, например.

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

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

2
ответ дан 3 December 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: