Как предварительно сжать очень большие html-файлы
Мне нужно предварительно сжать некоторые очень большие файлы html / xml / json (большие дампы данных) с помощью gzip или deflate. Я никогда не хочу обслуживать файлы без сжатия. Они настолько большие и повторяющиеся, что сжатие, вероятно, будет работать очень хорошо, и, хотя некоторые старые браузеры не могут поддерживать декомпрессию, мои типичные клиенты не будут их использовать (хотя было бы неплохо, если бы я мог создать какое-то сообщение "Эй, вам нужно обновить браузер")
Я автоматически генерировать файлы и я можем легко генерировать .файлы htaccess для каждого типа файлов. По сути, то, что я хочу, - это всегда на версии mod_gunzip. Поскольку файлы большие, и поскольку я буду повторно обслуживать их, мне нужен метод, который позволяет мне сжимать один раз, действительно хорошо, в командной строке.
Я нашел некоторую информацию на этом сайте и другие о том, как это сделать с помощью gzip, но я задавался вопросом, Может ли кто-то пройти через меня, как это сделать с помощью выкачивать. Бонусные баллы за полный ответ, который включает в себя то, что мое .файл htaccess должен выглядеть так же, как и код командной строки, который я должен использовать (GNU/Linux) для получения оптимального сжатия. Супер бонусные баллы за ответ, который также касается того, как отправить сообщение "Извините, нет файла для вас" в несовместимые браузеры.
было бы неплохо, если бы мы могли создать тег "precompression" для покрытия таких вопросов.
-FT
4 ответов
Edit: нашел 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 может сжимать и кэшировать (сжатые) файлы.
на вашем месте я бы посмотрел на встроенное сжатие файловой системы вместо того, чтобы делать это на уровне apache.
на solaris zfs имеет прозрачное сжатие, используйте сжатие zfs, чтобы просто сжать файловую систему. Аналогично, windows может сжимать папки, apache будет обслуживать контент, не обращая внимания на то, что он сжат на диске. Linux имеет файловые системы, которые также выполняют прозрачное сжатие.
для командной строки скомпилируйте zpipe zlib:http://www.zlib.net/zpipe.c и затем
zpipe < BIGfile.html > BIGfile.htmlz
например.
затем, используя пример Zash, настройте фильтр для изменения заголовка. Это должно обеспечить вам наличие RAW deflate файлов, которые современные браузеры вероятно,.
для другого способа сжатия файлов взгляните на использование pigz С zlib (-z) или pkware zip (- K) параметры сжатия. Тест если они работают с набором Content-Encoding.
быстрый способ сжатия содержимого без непосредственного взаимодействия с 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 */