Ответить Новая тема Новый опрос 
Всего: 9 < 1 2 3 4 5 6 7 > »
 Оптимизация кэширования
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


29-06-2010 12:36
Ну тогда так
Код:
/*fix*/
$smarty->caching      = true;
if (!$smarty->is_cached(_PS_THEME_DIR_.'category.tpl', Tools::getValue('id_category').$orderBy.$orderWay)) {
/*fix*/
$errors = array();
if (!isset($_GET['id_category']) OR !Validate::isUnsignedId($_GET['id_category']))
    $errors[] = Tools::displayError('category ID is missing');
else
{
...
if (isset($subCategories))
    $smarty->assign(array(
        'subcategories_nb_total' => sizeof($subCategories),
        'subcategories_nb_half' => ceil(sizeof($subCategories) / 2)));

//$smarty->display(_PS_THEME_DIR_.'category.tpl');
/*fix*/
}
$smarty->display(_PS_THEME_DIR_.'category.tpl',Tools::getValue('id_category').$orderBy.$orderWay);
$smarty->caching      = false;
/*fix*/


Число страниц в кэше будет равно (число категорий)*(число вариантов сортировки)*(число направлений сортировки)
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Kiru4a
Новичок
Сообщений: 25
Регистрация: 05-04-2010


01-07-2010 00:03
Ors,
Насчет кэширования категорий...
так поняла что нужно править category.tpl
и текущее содержимое этого темплейта должно быть вместо "...." в вашем коде?
Правильно?
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


01-07-2010 00:23
Нужно то, что обрамлено строками /*fix*/ поставить в нужном месте. А это нужное место находится путем поиска строк, которые находятся радом.

Например
Код:
/*fix*/
$smarty->caching      = true;
if (!$smarty->is_cached(_PS_THEME_DIR_.'category.tpl', Tools::getValue('id_category').$orderBy.$orderWay)) {
/*fix*/

Нужно вставить до строки
Код:
$errors = array();
if (!isset($_GET['id_category']) OR !Validate::isUnsignedId($_GET['id_category']))
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
AID
Новичок
Сообщений: 19
Регистрация: 16-11-2009


09-07-2010 15:54
Ors,
все делаю как Вы сказали,
Цитата:

/*fix*/
$smarty->caching = true;
if (!$smarty->is_cached(_PS_THEME_DIR_.'category.tpl', Tools::getValue('id_category').$orderBy.$orderWay)) {
/*fix*/

$errors = array();
....
//$smarty->display(_PS_THEME_DIR_.'category.tpl');
/*fix*/
}
$smarty->display(_PS_THEME_DIR_.'category.tpl',Tools::getValue('id_category').$orderBy.$orderWay);
$smarty->caching= false;
/*fix*/

include(dirname(__FILE__).'/footer.php');


НО кеширование категорий и сортировка работают только на локалхосте (Денвер),
а на хостингу не работает ни кеширование, ни сортировка...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


09-07-2010 16:30
Как определили что не работает кэширование? Права на запись в папку есть? Отключен force-recompile? (читайте первый пост).
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
AID
Новичок
Сообщений: 19
Регистрация: 16-11-2009


09-07-2010 17:06
Права на запись category.tpl есть.
$smarty->force_compile = false;

Сортировка уже работает,
но визуально работу кеширования не видно - как список категорий грузился секунду позже всех модулей, так и грузится (на хостинге),
а на локалхосте скорость загрузки блока категорий стала моментальной (после использования фиксов).
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


09-07-2010 17:51
Не может блок категорий на секунду позже всех модулей загружаться. Он может начинать отображаться после загрузки всей страницы, но кэширование тут ни причем. За это отвечает javascript
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
AID
Новичок
Сообщений: 19
Регистрация: 16-11-2009


10-07-2010 14:15
С етим разобрался, спасибо,
но пришлось убрать эти фиксы - нашлось несколько багов:
1. невозможно перейти на другую страницу с товарами, если в категории более 10 товаров (тоесть если 30товаров в категории, то получается 3страници)
2. невозможно изменить валюту при просмотре товаров в категории - валюта переключается вверху, но на странице цены остаются в той, какой и были.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


10-07-2010 14:20
Это не баги а фичи.
К строке Tools::getValue('id_category').$orderBy.$orderWay нужно добавить номер страницы и валюту.
При этом размер кэша пропорционально вырастет.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
PuffyShop
Новичок
Сообщений: 49
Регистрация: 19-05-2010


15-10-2010 17:01
Цитата:( ors @ 08-06-2010 17:36 Смотреть сообщение )
Включение сжатия css и js без увеличения нагрузки на сервер:
1. Пакуем файлы (с помощью 7-zip или gzip) и кладем на место обычных (расширение у файлов должно остаться прежним, .css или .js). Например, вы берете файл anyname.css, пакуете его 7-zip, у вас получается файл anyname.css.gz, переименовываем его обратно в anyname.css и заливаем на сервер
2. Рядом с пожатыми файлами кладутся файлы с расширением nogzip.css или nogzip.js, которые содержат неархивированные копии. Например, после заливки сжатого файла anyname.css, вы создаете на сервере еще один файл anyname.nogzip.css, который является копией несжатого файла. Для gzip это копирование уже производится чуть выше второй строкой в листинге
3. Добавляем в .htaccess
Код:
<IfModule mod_rewrite.c>
    RewriteEngine On
#перенаправляем Konqueror и «старые браузеры»
    RewriteCond %{HTTP:Accept-encoding} !gzip [OR]
    RewriteCond %{HTTP_USER_AGENT} Konqueror
    RewriteRule ^(.*)\.(css|js)$ $1.nogzip.$2 [QSA,L]
</IfModule>                

<IfModule mod_headers.c>
    Header append Vary User-Agent
#выставляем для всех css/js файлов Content-Encoding
    <FilesMatch .*\.(js|css)$>
    Header set Content-Encoding: gzip
    Header set Cache-control: private
    </FilesMatch>
#сбрасываем Content-Encoding в том случае, если отдаем не архив
    <FilesMatch .*\.nogzip\.(js|css)$>
    Header unset Content-Encoding
    </FilesMatch>
</IfModule>


Загружаем jquery с google. У многих пользователей он уже есть в кэше, так что снизим размер загрузки еще на 30кб.
В header.tpl заменяем
Код:
<script type="text/javascript" src="{$content_dir}js/jquery/jquery-1.2.6.pack.js"></script>
на
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
Сделал в точности как вы описали, но почему то не заработало сжатие gzip .... в чём может быть причина?

Вот текст моего htaccess :
Код:
# .htaccess automaticaly generated by PrestaShop e-commerce open-source solution
# http://www.prestashop.com - http://www.prestashop.com/forums

# URL rewriting module activation
RewriteEngine on

# URL rewriting rules
RewriteRule ^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2$3.jpg [L,E]
RewriteRule ^([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/c/$1$2.jpg [L,E]
RewriteRule ^lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$3&isolang=$1$5 [L,E]
RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2&isolang=$1$4 [L,E]
RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$2&isolang=$1 [QSA,L,E]
RewriteRule ^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E]
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 [L,E]
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$1 [QSA,L,E]
RewriteRule ^content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /cms.php?id_cms=$1 [QSA,L,E]
RewriteRule ^([0-9]+)__([a-zA-Z0-9-]*)(.*)$ /supplier.php?id_supplier=$1$3 [QSA,L,E]
RewriteRule ^([0-9]+)_([a-zA-Z0-9-]*)(.*)$ /manufacturer.php?id_manufacturer=$1$3 [QSA,L,E]
RewriteRule ^lang-([a-z]{2})/(.*)$ /$2?isolang=$1 [QSA,L,E]

RewriteRule ^blog/?$ /modules/newscore/news.php [L,E]
RewriteRule ^blog/entry/([0-9]+)-([a-zA-Z0-9-]*)(.html)?$ /modules/newscore/news.php?id_entry=$1 [QSA,L,E]
RewriteRule ^blog/category/([0-9]+)-([a-zA-Z0-9-]*)(.html)?$ /modules/newscore/news.php?category_id=$1 [QSA,L,E]
RewriteRule ^blog/category/([0-9]+)-([a-zA-Z0-9-]*)/entry/([0-9]+)-([a-zA-Z0-9-]*)(.html)?$ /modules/newscore/news.php?categ

# Catch 404 errors
ErrorDocument 404 /404.php

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.puffy-shop\.ru$ [NC]
RewriteRule ^(.*)$ http://puffy-shop.ru/$1 [R=301,L]
<IfModule mod_rewrite.c>
    RewriteEngine On
    #перенаправляем Konqueror и «старые браузеры»
    RewriteCond %{HTTP:Accept-encoding} !gzip [OR]
    RewriteCond %{HTTP_USER_AGENT} Konqueror
    RewriteRule ^(.*)\.(css|js)$ $1.nogzip.$2 [QSA,L]
</IfModule>                

<IfModule mod_headers.c>
    Header append Vary User-Agent
    #выставляем для всех css/js файлов Content-Encoding
    <FilesMatch .*\.(js|css)$>
    Header set Content-Encoding: gzip
    Header set Cache-control: private
    </FilesMatch>
    #сбрасываем Content-Encoding в том случае, если отдаем не архив
    <FilesMatch .*\.nogzip\.(js|css)$>
    Header unset Content-Encoding
    </FilesMatch>
</IfModule>
<FilesMatch \.(css|js|ico|png|gif|jpg)$>
<IfModule mod_headers.c>
    Header append Cache-Control private
  </IfModule>
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 10 years"
</IfModule>
</FilesMatch>




Сообщение отредактировано PuffyShop 15-10-2010 18:02 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос 
Всего: 9 < 1 2 3 4 5 6 7 > »