Powered by CodeIgniter
aesteral

aesteral

0
0 голосов
  ПрофильБлог (2)Комментарии (1)ЗакладкиПродукты 
Cogear изначально умеет склеивать js и css файлы в один и кешировать результат, но при этом не выполняет их сжатие, что приводит к необходимости каждому посетителю скачивать довольно тяжелые файлы со скриптами и стилями.
Сначала нужно скачать jsmin.php и cssmin.php и положить их в /gears/global/library. Взять их можно с их официальных сайтов: jsmin и cssmin.

После этого следует немного изменить assets.class.php в том же каталоге. Найти там строки (172 в нынешнем trunk).

$output = $this->prepare($output); file_put_contents($this->dir.$this->global_template.'_'.$group.'.'.$type,$output);
и заменить их на следующие

$output = $this->prepare($output); switch($group) { case 'scripts': file_put_contents($this->dir.$this->global_template.'_'.$group.'.'.$type,JSMin::minify($output)); break; case 'styles': file_put_contents($this->dir.$this->global_template.'_'.$group.'.'.$type,cssmin::minify($output)); break; default: file_put_contents($this->dir.$this->global_template.'_'.$group.'.'.$type,$output); break; }
Можно вывод jsmin и cssmin сразу жать gzip-ом и сохранять уже сжатые файлы с .nogzip-копиями (так советует webo.in) или же жать на лету с помощью mod_deflate, хотя это и несколько грузит сервер. Для этого в /uploads/assets/.htaccess добавим пару строчек.

<IfModule mod_deflate.c> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip Header append Vary User-Agent env=!dont-vary </IfModule>
Тут не используется AddOutputFilterByType потому, что все файлы в assets следует сжимать gzip-ом.

js/inline в gears тоже стоит сжимать gzip-ом, для этого в /gears/.htaccess добавим

<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE application/javascript application/x-javascript text/javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip Header append Vary User-Agent env=!dont-vary </IfModule>
17:25 ← 03 сентября 2010 Отправить в Твиттер aesteralaesteral  RSS comments 2

Комментарии (2) ↓

admin admin time 03:26 ← 04 сентября 2010 #
Такой вариант был, но он тормозной — сразу сказывается на времени загрузки страницы, когда скрипты или стили обновляются.
Обычно сейчас на всех современных хостингах включен gzip на лету через nginx.
Ramir Ramir time 08:39 ← 24 января 2012 #
действительно тормозит. Можно после строк
$output = $this->prepare($output); file_put_contents($this->dir.$this->global_template.'_'.$group.'.'.$type,$output); добавить такое:
$gzdata = gzencode($output, 5); file_put_contents($this->dir.$this->global_template.'_'.$group.'.'.$type.'.gz',$gzdata);
Естественно в nginx включить gzip_static on;