0 Пользователей и 1 Гость просматривают эту тему.
  • 197 Ответов
  • 79015 Просмотров
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
 Предлагаю помещать в эту тему простые хаки для улучшения производительности VirtueMart.
Сам я недавно ковыряюсь в нем.
Сегодня например сделал следующее:
В файле ps_product.php есть функция function get_flypage($product_id),
которая возвращает шаблон товара.
Внутри функции есть запрос от которого я предполагаю можно избавиться, если шаблон для отображения товара используем один.

Первоначальная функция
Код
function get_flypage($product_id) {


if( empty( $_SESSION['product_sess'][$product_id]['flypage'] )) {
$db = new ps_DB;
$productParentId = (int)$product_id;
do {
$q = "SELECT
                                `#__{vm}_product`.`product_parent_id` AS product_parent_id,
                                `#__{vm}_category`.`category_flypage`
                        FROM
                                `#__{vm}_product`

                        LEFT JOIN `#__{vm}_product_category_xref` ON `#__{vm}_product_category_xref`.`product_id` = `#__{vm}_product`.`product_id`
                        LEFT JOIN `#__{vm}_category` ON `#__{vm}_product_category_xref`.`category_id` = `#__{vm}_category`.`category_id`

                        WHERE `#__{vm}_product`.`product_id`='$productParentId'
                        ";
$productParentId = $db->f("product_parent_id");
$db->query($q);
$db->next_record();
}
while( $db->f("product_parent_id") && !$db->f("category_flypage"));

if ($db->f("category_flypage")) {
$_SESSION['product_sess'][$product_id]['flypage'] = $db->f("category_flypage");
} else {
$_SESSION['product_sess'][$product_id]['flypage'] = FLYPAGE;
}
}
return $_SESSION['product_sess'][$product_id]['flypage'];
}

Функция после переделки
Код
 function get_flypage($product_id) {
$_SESSION['product_sess'][$product_id]['flypage'] = "mypage.tpl";
return $_SESSION['product_sess'][$product_id]['flypage'];
}

Я принудительно задаю шаблон для отображения страницы "mypage.tpl"
Так как на сайте всегда использую только его
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
В оригинальном коде, запрос выполняется один раз, а потом значение хранится в сессии, это все понятно. Но зачем в вашей функции использовать сессию? По-моему проще эту функцию записать вот так:

Код: php
function get_flypage($product_id) {
return 'mypage.tpl';
}
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
Единственный "фишка"для оптимизации вирта и та не подходит под мой случай (используются разные шаблоны)
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Заметил что VirtueMart в некоторых случаях часто гоняет запросы вида
Код
SELECT tax_rate 
  FROM jos_vm_product, jos_vm_tax_rate
  WHERE product_tax_id=tax_rate_id
  AND product_id=401

Например при просмотре корзины.
Версия VirtueMart у меня VM 1.1.4
Привожу для случая когда налоговая ставка вычисляется в зависимости от адреса продавца
Обнаружил что в файле ps_product.php 
в функции function get_product_taxrate( $product_id, $weight_subtotal=0, $ship_to_info_id = '' )
в условии elseif( ps_checkout::tax_based_on_vendor_address ( $ship_to_info_id ) ) {
которая возвращает налоговую ставку для продукта в зависимости от адреса продавца закомментированы
строки
1601//   if( empty( $_SESSION['product_sess'][$product_id]['tax_rate'] ) ) {
1622//         }
1623//         else {
1624//            return $_SESSION['product_sess'][$product_id]['tax_rate'];
1625//         }

Я их расскоментировал чтобы ставка для продукта бралась из сессии (если есть).
для корзины кол-во запросов сразу упало на четверть.


По идее если налогавая ставка одна можно вообще переписать функциии для них (их две)
чтобы они всегда возвращали константу например 0.18 или 0 и не гоняли запорсов к базе.



*

Sulpher

  • Живу я здесь
  • 2121
  • 401 / 16
  • Шаблоны и расширения Joomla
Попробовал оба предлагаемых решения - снижения кол-ва запросов в отладочном режиме не заметил.
*

KoHb

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
увеличил производительность магазина в 2 раза при выводе списка товаров следующим образом.
В shop.browse.php информация о товарах собирается в цикле
while ($db_browse->next_record()){
        ...
         
}// END OF while loop
При каждом запуске информация о товарах расчитывается заново, что не есть хорошо, поэтому выносим расчеты информации о товаре в отдельную функцию и вызываем эту функцию через  $cache->call(), где $cache = & JFactory::getCache();


*

everestrus

  • Захожу иногда
  • 97
  • 3 / 0
  • Moto на территории UA
а по подробнее
*

M@X1M

  • Осваиваюсь на форуме
  • 43
  • 0 / 0
В ps_session->url() закомментировал селекты id из #__menu. Как я понял, они нужны только, если в меню Joomla есть пункты-ссылки на категории или товары VirtueMart. У меня же используется mod_product_categories для меню магазина. Хотя могу быть и не прав, сильно не разбирался, но все работает, а количество запросов уменьшилось на 29 штук.

Есть еще несколько мелких доработок по 1-3 запроса. Если интересно могу выложить, но они все специфические в основном (отключение ненужного функционала).
*

TrOn

  • Захожу иногда
  • 91
  • 0 / 0
увеличил производительность магазина в 2 раза при выводе списка товаров следующим образом.
В shop.browse.php информация о товарах собирается в цикле
while ($db_browse->next_record()){
        ...
         
}// END OF while loop
При каждом запуске информация о товарах расчитывается заново, что не есть хорошо, поэтому выносим расчеты информации о товаре в отдельную функцию и вызываем эту функцию через  $cache->call(), где $cache = & JFactory::getCache();




А подробнее описать? уж очень надо
*

vlades

  • Осваиваюсь на форуме
  • 19
  • 1 / 0
У меня очень большие проблемы со скорость в VirtueMart , товаров около 16000 , страница с товарами генеририруется больше 3 секунд (от перегрузок сервера спасает только кэширование), цены обновляются часто и кэш приходиться чистить часто. а файл кэша создаётся больше 3 секунд .... вообщем ну очень долго

Наткнулся на плагин SpeedBooster для VirtueMart
авторы обещают ускорение на 80%
До:
Код
Application afterRender: 2.285 seconds, 13.04 MB
128 queries logged
После:
Код
Application afterRender: 0.861 seconds, 12.96 MB
48 queries logged
Он платный: 20 фунтов
но это не много за такой результат

Ктонибудь пользовался этим плагином ?
Интерисует реальный результат

Инфо на VirtueMart.net - http://extensions.virtuemart.net/index.php?option=com_sobi2&sobi2Task=sobi2Details&catid=1&sobi2Id=327&Itemid=
Инфо на офф сайте - http://codingmall.com/products-mainmenu-8/65-speed-up-virtuemart
*

everestrus

  • Захожу иногда
  • 97
  • 3 / 0
  • Moto на территории UA
а там же у них можно попросить тестовою версию
*

vlades

  • Осваиваюсь на форуме
  • 19
  • 1 / 0
незаметил ... буду просить

ещё покапался на forum.virtuemart.net там советуют быстрые серверы MySQL с большими пропускными каналами
там приводились примеры магазинов с 300 000 товаров которые достаточно шустро работают
*

era

  • Администратор
  • 1588
  • 392 / 5
  • В туалете лучше быть пользователем, чем админом.
ещё покапался на forum.virtuemart.net там советуют быстрые серверы MySQL с большими пропускными каналами
это примерно тоже что на вопрос "почему американские трактора в 3-и раза эффективней белорусских", ответить: "просто надо белорусские трактора в три раза больше по размерам сделать"
*

everestrus

  • Захожу иногда
  • 97
  • 3 / 0
  • Moto на территории UA
У меня очень большие проблемы со скорость в VirtueMart , товаров около 16000 , страница с товарами генеририруется больше 3 секунд (от перегрузок сервера спасает только кэширование), цены обновляются часто и кэш приходиться чистить часто. а файл кэша создаётся больше 3 секунд .... вообщем ну очень долго

Наткнулся на плагин SpeedBooster для VirtueMart
авторы обещают ускорение на 80%
До:
Код
Application afterRender: 2.285 seconds, 13.04 MB
128 queries logged
После:
Код
Application afterRender: 0.861 seconds, 12.96 MB
48 queries logged
Он платный: 20 фунтов
но это не много за такой результат

Ктонибудь пользовался этим плагином ?
Интерисует реальный результат

Инфо на VirtueMart.net - http://extensions.virtuemart.net/index.php?option=com_sobi2&sobi2Task=sobi2Details&catid=1&sobi2Id=327&Itemid=
Инфо на офф сайте - http://codingmall.com/products-mainmenu-8/65-speed-up-virtuem
незаметил ... буду просить

ещё покапался на forum.virtuemart.net там советуют быстрые серверы MySQL с большими пропускными каналами
там приводились примеры магазинов с 300 000 товаров которые достаточно шустро работают
art[/url]
Вообщем дали они мне этот плагин тестовый, сказали типа что это полностью функциональный плагин только будет выкидывать лицензию!
не знаю толи я что то не так сделал (но вроде все перепробовал) у меня как было 620 запросов, так и осталось! да и еще к тому в панелька там где производители, когда выбираеш производителся то оно мне на главную страницу магазина перекидывает! когда выключил все окей!
*

Sulpher

  • Живу я здесь
  • 2121
  • 401 / 16
  • Шаблоны и расширения Joomla
everestrus, не пробовал с ними связаться на предмет вопроса почему кол-во запросов не уменьшается?
*

everestrus

  • Захожу иногда
  • 97
  • 3 / 0
  • Moto на территории UA
everestrus, не пробовал с ними связаться на предмет вопроса почему кол-во запросов не уменьшается?
написал пока жду ответа!
*

everestrus

  • Захожу иногда
  • 97
  • 3 / 0
  • Moto на территории UA
вообщем вот написали ответ It works on product detail pages.
ну это не сильно мне нравится, у меня 600 запросов при открытии категории! а тут только на продукты!
*

Sulpher

  • Живу я здесь
  • 2121
  • 401 / 16
  • Шаблоны и расширения Joomla
что и следовало ожидать :) честно говоря, я скептически отнёсся к данному акселлератору. тут нужно код VirtueMart править, а не плагины ставить.
*

vlades

  • Осваиваюсь на форуме
  • 19
  • 1 / 0
Цитировать
Вообщем дали они мне этот плагин тестовый, сказали типа что это полностью функциональный плагин только будет выкидывать лицензию!
не знаю толи я что то не так сделал (но вроде все перепробовал) у меня как было 620 запросов, так и осталось! да и еще к тому в панелька там где производители, когда выбираеш производителся то оно мне на главную страницу магазина перекидывает! когда выключил все окей!
у меня тоже самое
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
проверьте эффективность и моей оптимизации на скорость показа
1)
в shop.browse.php ищем
$files = ps_product_files::getFilesForProduct( $db_browse->f('product_id'));
и заменяем на
$files = ps_product_files::getFilesForProduct( $db_browse->f('product_id'), $db_browse->f('product_parent_id') );

2)
в ps_product_files.php ищем
function getFilesForProduct( $pid ) {
.....
}
и заменяем все ее на
Код
function getFilesForProduct( $pid, $ppid = -1 ) {
$db= new ps_DB();
$files['images'] = array();
$files['files'] = array();
// Query for images if child doesn't have them check for parents
                                if ($ppid < 0 ) {
     $db->query( "SELECT product_parent_id FROM `#__{vm}_product`  WHERE `product_id`=".intval($pid) );
   $ppid = $db->f("product_parent_id");
}
$db->query( "SELECT * FROM `#__{vm}_product_files` WHERE `file_product_id`=".intval($pid)." AND `file_published`=1" );
if(!$db->next_record()) {
 if ($ppid > 0 ) {
     $db->query("SELECT * FROM `demo_jos_vm_product_files` WHERE `file_product_id` = ".$ppid." AND `file_published` =1");
        $db->reset();
              while( $db->next_record() )
                                         {
                                               if ( $db->f("file_is_image") == 1)
                                                     {
                 $files['images'][] = $db->get_row();
   }
        else
             {  $files['files'][] = $db->get_row();}
                                        }
  }
}
                                else
{
        $db->reset();
              while( $db->next_record() ) {
                                               if ($db->f("file_is_image") == 1)
                                                     {
                 $files['images'][] = $db->get_row();
   }
        else
              { $files['files'][] = $db->get_row();}
    }
}
return $files;
}
« Последнее редактирование: 18.02.2010, 19:59:06 от haword »
*

everestrus

  • Захожу иногда
  • 97
  • 3 / 0
  • Moto на территории UA
А каков должен быть результат?
*

Sulpher

  • Живу я здесь
  • 2121
  • 401 / 16
  • Шаблоны и расширения Joomla
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
уменьшится время создания страницы, при одинаковых условиях должно уменьшиться количество запросов на  - "кол. показываемого товара" * 3 поэтому проверьте скорость обработки уменьшилась или нет
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
еще одна модификация, проверил только на показе товара, поиск пока не работает, VM 1.1.4, старый файл переименовываем новый заливаем. Проверьте на БОЛЬШОМ количестве товара так как на малом думаю эффекта не будет. Должно уменьшится время формирования страницы. Надеюсь что дождусь ответа, если нет буду на других форумах отдавать тестировать.

[вложение удалено Администратором]
« Последнее редактирование: 18.02.2010, 12:05:02 от haword »
*

cadet

  • Захожу иногда
  • 239
  • 17 / 0
еще одна модификация, проверил только на показе товара, поиск пока не работает, VM 1.1.4, старый файл переименовываем новый заливаем. Проверьте на БОЛЬШОМ количестве товара так как на малом думаю эффекта не будет. Должно уменьшится время формирования страницы. Надеюсь что дождусь ответа, если нет буду на других форумах отдавать тестировать.

Проверил на магазине с 3000 товаров. Просмотр главной страницы магазина.
Результат:
Было:
Код
Информация о профиле
Application afterLoad: 0.003 seconds, 0.27 MB
Application afterInitialise: 0.099 seconds, 2.72 MB
Application afterRoute: 0.137 seconds, 4.24 MB
Application afterDispatch: 0.363 seconds, 10.18 MB
Application afterRender: 1.241 seconds, 13.09 MB
Использование памяти
13776304
Зарегистрировано запросов: 746

Стало:
Код
Информация о профиле
Application afterLoad: 0.003 seconds, 0.27 MB
Application afterInitialise: 0.080 seconds, 2.73 MB
Application afterRoute: 0.120 seconds, 4.25 MB
Application afterDispatch: 0.342 seconds, 10.19 MB
Application afterRender: 1.114 seconds, 13.10 MB
Использование памяти
13782296
Зарегистрировано запросов: 746
*

cadet

  • Захожу иногда
  • 239
  • 17 / 0
проверьте эффективность и моей оптимизации на скорость показа
Проверил на VirtueMart 1.1.4 (3000 товаров) просмотр главной страницы магазина.

В  ps_product_files.php не нашел
Код
function getFilesForProduct( $pid, $ppid = -1 ) {

нашел
Код
function getFilesForProduct( $pid ) {

После замены результат
Было
Код
Информация о профиле
Application afterLoad: 0.003 seconds, 0.27 MB
Application afterInitialise: 0.071 seconds, 2.74 MB
Application afterRoute: 0.099 seconds, 4.26 MB
Application afterDispatch: 0.311 seconds, 10.20 MB
Application afterRender: 0.959 seconds, 13.11 MB
Использование памяти
13796656
Зарегистрировано запросов: 745

Стало
Код
Информация о профиле
Application afterLoad: 0.004 seconds, 0.27 MB
Application afterInitialise: 0.078 seconds, 2.75 MB
Application afterRoute: 0.109 seconds, 4.27 MB
Application afterDispatch: 0.334 seconds, 10.21 MB
Application afterRender: 0.943 seconds, 13.12 MB
Использование памяти
13807608
Зарегистрировано запросов: 746


т.е. в пределах погрешности.


После включения кеша
Код
Информация о профиле
Application afterLoad: 0.004 seconds, 0.27 MB
Application afterInitialise: 0.081 seconds, 2.85 MB
Application afterRoute: 0.109 seconds, 4.31 MB
Application afterDispatch: 0.324 seconds, 10.27 MB
Application afterRender: 0.904 seconds, 13.17 MB
Использование памяти
13858048
Зарегистрировано запросов: 745
« Последнее редактирование: 18.02.2010, 17:40:08 от cadet »
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
cadet все два шага сделал? вызов функции в shop.browse.php не забыл изменить? должно было сказаться при просмотре списка товаров в категории. уменьшится количество запросов.

а вторую модификацию пробовал? там нужно файл заменить и  проверить тоже на списке товара в каталоге. Поиск с ним пока не работает, а скорость возрасти должна была, если скорость повыситься доделаю поиск.
« Последнее редактирование: 18.02.2010, 20:07:22 от haword »
*

cadet

  • Захожу иногда
  • 239
  • 17 / 0
Проверял оба варианта. Проверял на локалке. Делал изменения по инструкции.

Проверял только на главной странице VirtueMart, там где категории
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
эффект должен быть при просмотре списка товара в категории где и идут обычно тормоза.
*

cadet

  • Захожу иногда
  • 239
  • 17 / 0
эффект должен быть при просмотре списка товара в категории где и идут обычно тормоза.
Проверял вариант №1 с двумя файлами. При просмотре категории с товарами получил результат:
Было
Код
Информация о профиле
Application afterLoad: 0.003 seconds, 0.27 MB
Application afterInitialise: 0.104 seconds, 2.78 MB
Application afterRoute: 0.138 seconds, 4.26 MB
Application afterDispatch: 0.973 seconds, 12.72 MB
Application afterRender: 1.897 seconds, 14.75 MB
Использование памяти
15514368
Зарегистрировано запросов: 1011

Получил
Код
Информация о профиле
Application afterLoad: 0.003 seconds, 0.27 MB
Application afterInitialise: 0.077 seconds, 2.80 MB
Application afterRoute: 0.137 seconds, 4.26 MB
Application afterDispatch: 0.636 seconds, 12.71 MB
Application afterRender: 1.372 seconds, 14.73 MB
Использование памяти
15497272
Зарегистрировано запросов: 934

т.е. результат есть.


Сейчас проверю второй вариант с заменой файла.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VirtueMart - SMS уведомления о сделаном заказе.

Автор bork

Ответов: 42
Просмотров: 22341
Последний ответ 26.07.2021, 22:11:25
от Oleg91
Отчеты и статистика для VirtueMart

Автор 4kict

Ответов: 25
Просмотров: 10028
Последний ответ 14.01.2021, 00:09:53
от gartes
IceVmCart - новый бесплатный модуль корзины для VirtueMart

Автор Grig2009

Ответов: 105
Просмотров: 52318
Последний ответ 05.02.2017, 11:44:02
от Super_Panda
Модуль недавно просмотренные товары для VirtueMart 1.1.X

Автор aleks_yug

Ответов: 97
Просмотров: 25979
Последний ответ 25.10.2016, 15:03:07
от Igoritaly
VirtueMart 1.1.8 - Наличие: Есть (по умолчанию) + Наличие: ZZZ (бр

Автор Nessy74

Ответов: 6
Просмотров: 2393
Последний ответ 22.01.2016, 13:24:17
от AzMandius