Не знал куда можно отнести эту тему, поэтому напишу в оффтопик.
На днях с удивлением для себя обнаружил, что zgip не кэширеются.
Т.е. например мы хотим js файлы уменьшить в размере.
Возьмем к примеру файл какого-нибудь js framework-а.
Переименуем его на framework.php и перед кодом добавим следующие строки
<?php
header("content-type: application/x-javascript");
ob_start("ob_gzhandler");
?>
Затем глянем в firebug размер нашего framework-a, он уменьшится где то 3 раза.
Только вот дело в том, что эта штука не кэшируется, потому, при каждом таком запросе, в качестве даты создания файла, показывается текущее время сервера. Поэтому браузер опять загружает файл.
Как только не пробовал это исправить, ни в какую.
Способ первый (Жесткое кэширование, из статьи Ильи Кантора, и других источников)
Пишем вот эти строки в нашем php файле
<?php
header("content-type: application/x-javascript");
header("Expires: ".gmdate("D, d M Y H:i:s", time()+86400*365*12)." GMT");
header("Cache-Control: max-age="+86400*365*12);
ob_start("ob_gzhandler");
?>
Метод не работает, все равно загружается.
Способ второй.
C помощью 7-zip архивируем framework получаем файл
framework.jz.gz
И добавляем в файл .htaccess вот эти строки
(Возможно надо как то по другому, но перебрал все варианты, которые в встретил, это лишь один из них)
Код:
|
RewriteEngine on
RewriteRule ^(.*\.js\.gz)$ - [L]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz |
Кэширут, но наш framework перестает работать.
В качестве простого примера, сделал функцию
Поместил в файл function.js, дальше 7-zip получил function.js.gz
function hi(text){
console.log(text);
}
И подключил в файле
<html>
<head>
<title>GZIP</title>
<script src='js/function.js.gz'></script>
<script>
hi('hi');
</script>
</head>
<body>
</body>
</html>
Выдает ошибку:
illegal character
[Прерывать на этой ошибке] ‹PlПM
Может кто-нибудь знает как с этим справиться?
Пробовал в разных кодировках и utf-8 и windows-1251 результат одинаковый, пробовал
по разному архивировать: максимальное, нормальное сжатие.