Добрый день! Сайт sfera.by Гугл пишет включить сжатие скриптов. Подскажите, как включить это сжатие. Вот мой .htaccess Код: #dnwr_host cdn1.opencart.im cdn2.opencart.im Options +FollowSymlinks # Prevent Directoy listing Options All -Indexes # Prevent Direct Access to files <FilesMatch "\.(tpl|ini|log)"> Order deny,allow Deny from all </FilesMatch> # SEO URL Settings # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/ RewriteEngine On RewriteBase / RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L] RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css) RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA] # Редирект c www на без www RewriteCond %{HTTP_HOST} ^www.sfera.by RewriteRule ^(.*)$ https://sfera.by/$1 [R=301,L] # Редирект для главной (с /index.php на /) RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\ HTTP/ RewriteRule ^index\.html$ / [R=301,L] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ / [R=301,L] # Add "gzip Encoding" to already gzipped files AddType text/css .css .cssgz AddType text/javascript .js .jsgz AddEncoding x-gzip .cssgz .jsgz # Enable Gzip into use mod_gzip.c <IfModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ mod_gzip_item_include mime ^text\.* mod_gzip_item_include mime ^application/x-javascript.* mod_gzip_item_include mime ^application/x-font-woff.* mod_gzip_item_exclude mime ^image\.* mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* </IfModule> <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript </IfModule> # Disable access to php ettor log file <Files php_error.log> Order allow,deny Deny from all Satisfy All </Files> # Cache-Control <IfModule mod_headers.c> Header unset Last-Modified # 120 days <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|cssgz|jsgz)$"> Header set Cache-Control "max-age=7776000, public" </FilesMatch> # 120 days + Append Accept Encoding <FilesMatch "\.(css|js|cssgz|jsgz)$"> Header set Cache-Control "max-age=7776000, public" Header append Vary: Accept-Encoding </FilesMatch> # 120 days <FilesMatch "\.(xml|txt)$"> Header set Cache-Control "max-age=7776000, public, must-revalidate" </FilesMatch> # 120 days <FilesMatch "\.(html|htm|php)$"> Header set Cache-Control "max-age=7776000, private, must-revalidate" </FilesMatch> # Compatible with old browsers <FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" > Header unset X-UA-Compatible </FilesMatch> </IfModule> # Optimization for Browser Caching FileETag MTime Size <IfModule mod_expires.c> ExpiresActive on <filesmatch ".(jpg|jpeg|gif|png|ico|css|js|cssgz|jsgz)$"> ExpiresDefault "access plus 1 year" </filesmatch> ExpiresDefault "access 7 days" ExpiresByType application/javascript "access plus 1 year" ExpiresByType text/javascript "access plus 1 year" ExpiresByType text/css "access plus 1 year" ExpiresByType text/html "access plus 7 day" ExpiresByType text/x-javascript "access 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/x-icon "access 1 year" ExpiresByType application/x-shockwave-flash "access 1 year" </IfModule> #Compatible with old browsers <IfModule mod_setenvif.c> BrowserMatch "MSIE" force-no-vary BrowserMatch "Mozilla/4.[0-9]{2}" force-no-vary BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </IfModule> #max_execution_time это максимальное время работы скрипта, поставил побольше, чтобы сервер не вырубал работающий скрипт. php_value max_execution_time 200 ### Additional Settings that may need to be enabled for some servers ### Uncomment the commands by removing the # sign in front of it. ### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that. # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it: # php_flag register_globals off # 2. If your cart has magic quotes enabled, This may work to disable it: # php_flag magic_quotes_gpc Off # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try # php_value upload_max_filesize 999M # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields # php_value post_max_size 999M # 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields # php_value max_input_time 200 AddDefaultCharset utf-8
Конфиг мой) в AddOutputFilterByType DEFLATE нужно добавить Код: text/javascript Т.к. Ваш сервер отдает js файлы с таким заголовком (text/javascript). --- Добавлено, 12 май 2015 --- Если не сложно, то попробуйте новый класс кэширования, который не использует функцию glob. Может дать неплохой прирост. Еще заметил, что #header на некоторых страницах в высоту занимает 130px, а на некоторых 133px. Мало кто заметит, но все же. На сайте .htaccess обновил.
Добавил, но ничего не поменялось. Спасибо, подправил. А что там поменялось? Я не заметил вроде ничего. Я бы с удовольствием попробовал, но не совсем понял как это сделать, т.к. в PHP не силён. Может поможете? --- Добавлено, 12 май 2015 --- И ещё Гугл пишет: Включите функцию Keep-Alive на хосте sfera.by. Это можно сделать с помощью .htaccess? В поддержке хостинга сказали: "Сообщаем Вам что, к сожалению, мы не можем включить данную функцию, так как это затронет конфигурацию сервера в целом."
Вопрос - в Вашем варианте .htaccess - только сжатие скриптов? Я правильно понимаю? Редирект c без www на с www и с /index.php на / - нужно добавлять дополнительно?
в настройках самого сайта по ссылке http://вашсайт/admin/index.php?route=setting/setting есть раздел "сервер" где есть пункт "сжатие" устанавливайте в пределе 6-7
Это касается только генерированного опенкартом трафика, т.е. html кода. Насколько я вижу, js файлы посылаются сервером уже сжатые. Так что все работает. может просто Google Page Speed кэширует результаты проверок? Увы, оказывается я его еще до конца не дописал, есть ошибки. Там все просто. Нужно будет сделать копию файла system/library/cache.php, чтобы можно было обратить изменения в случае неправильной работы нового класса. Затем заменить содержимое этого файла на то, что я опубликовал в посте (последнее сообщение темы). И все, сейчас этот класс работает на modcom.kz. Увы, нет. Я туда добавил строчку, которую Вам порекомендовал. Мой вариант - .htaccess от OpenCart + сжатие скриптов, стилей, кэширование и нужные заголовки.
Установлено изначально на 9. Сделал, но есть проблема с OCfilter. В категориях вот такие ошибки: Код: Warning: fopen(/.../sfera.by/system/cache/cache.ocfilter.data.7fcff611dc2369a20f17aee1ba1f672b.cache) [function.fopen]: failed to open stream: No such file or directory in /.../sfera.by/system/library/cache.php on line 10 Warning: fopen(/.../sfera.by/system/cache/cache.ocfilter.manufacturer.167.cache) [function.fopen]: failed to open stream: No such file or directory in /.../sfera.by/system/library/cache.php on line 10 Warning: fopen(/.../sfera.by/system/cache/cache.ocfilter.option.167.1.cache) [function.fopen]: failed to open stream: No such file or directory in /.../sfera.by/system/library/cache.php on line 10 Warning: fopen(/.../sfera.by/system/cache/cache.ocfilter.data.7fcff611dc2369a20f17aee1ba1f672b.cache) [function.fopen]: failed to open stream: No such file or directory in /.../sfera.by/system/library/cache.php on line 10
Может быть, при большом кол-ве файлов в кэше это поможет. Визуально, возможно не увидите, а вот время генерации страниц уменьшится (у вас оно было и так маленькое).
Ещё вот такое в блоге выскочило: Код: Notice: Undefined index: name in /.../sfera.by/vqmod/vqcache/vq2-catalog_controller_common_header.php on line 287 Notice: Undefined index: name in /.../sfera.by/vqmod/vqcache/vq2-catalog_controller_common_header.php on line 290 Notice: Undefined index: name in /.../sfera.by/vqmod/vqcache/vq2-catalog_controller_common_header.php on line 298 Notice: Undefined index: manufacturer_id in /.../sfera.by/vqmod/vqcache/vq2-catalog_controller_common_header.php on line 299 Notice: Undefined index: status in /.../sfera.by/catalog/controller/module/currency.php on line 38
В модуле блога используется свой класс кэширования. В файле system/library/agoo/cache.php замените функции set, get, delete на функции из нового класса.
Только в случае использования nginx, при использовании Apache для отдачи статики и валидных заголовков для кэширования прокси-серверами или на клиента - плюс.
У меня в этой папке два файла cache.php и cache_.php. Менять только в cache.php? --- Добавлено, 14 май 2015 --- Заменил. Получилось: Код: <?php class agooCache { private $expire = 36000; public function get($key) { $file = DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.cache'; if (file_exists($file)) { $fp = fopen($file, 'r'); flock($fp, LOCK_SH); $data = unserialize(fread($fp, filesize($file))); flock($fp, LOCK_UN); fclose($fp); if ((filemtime($file) + $this->expire) < time()) { if (file_exists($file)) { unlink($file); } return false; } return $data; }else{ return false; } } public function set($key, $value) { $this->delete($key); $file = DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.cache'; if (!$fp = fopen($file, 'w')) return false; if (flock($fp, LOCK_EX)){ fwrite($fp, serialize($value)); flock($fp, LOCK_UN); fclose($fp); clearstatcache(); return true; } else { return false; } } public function delete($key) { $file = DIR_CACHE . 'cache.' . preg_replace('/[^A-Z0-9\._-]/i', '', $key) . '.cache'; if (file_exists($file)) { unlink($file); } } } if (!function_exists('agoo_error_handler')) { function agoo_error_handler($errno, $errstr) { } } ?> И файл system/library/cache.php вот отсюда взял. Всё верно?