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

cadet

  • Захожу иногда
  • 239
  • 17 / 0
Второй вариант с заменой файла из архива shop_browse_queries.rar

Результат - никаких улучшений. запросов сколько было, столько и осталось.
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
должно время сократиться было.

вот еще хаки, заменить ими существующие файлы, старые сохранить потом если будут глюки вернуть назад.
не забываем отписаться о результатах



[вложение удалено Администратором]
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
С помощью изменения shop_browse_queries нисколько запросов не уберется т.к. весь файл - один единственный запрос.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Большинство ненужных запросов генерят функции определения флайпейджа, итемида и урл. А так-же если кто не выключил - рекомендуемые товары и недавно просмотренные товары. А так-же функция вывода цены. Все остальное конечно тоже можно поправить, но оптимизация вышеназванных функций приведет к уменьшению запросов раза в 2.
*

cadet

  • Захожу иногда
  • 239
  • 17 / 0
должно время сократиться было.
Вот результат.

Было:
Код
Информация о профиле
Application afterLoad: 0.004 seconds, 0.27 MB
Application afterInitialise: 0.077 seconds, 2.79 MB
Application afterRoute: 0.105 seconds, 4.32 MB
Application afterDispatch: 1.116 seconds, 13.12 MB
Application afterRender: 1.496 seconds, 15.12 MB
Использование памяти
15912928
Зарегистрировано запросов: 1541

Стало
Код
Информация о профиле
Application afterLoad: 0.003 seconds, 0.27 MB
Application afterInitialise: 0.076 seconds, 2.76 MB
Application afterRoute: 0.104 seconds, 4.28 MB
Application afterDispatch: 1.035 seconds, 12.93 MB
Application afterRender: 1.428 seconds, 14.93 MB
Использование памяти
15708616
Зарегистрировано запросов: 1418


Далее. Отключил модуль VirtueMart который сбоку дерево товаров отображал - с 900 запросов стало 69. Т.е. боковое дерево формирует очень много запросов в базу. Надо с этим что-то делать...
*

cadet

  • Захожу иногда
  • 239
  • 17 / 0
Вот результат.

Было:
Код
Информация о профиле
Application afterLoad: 0.004 seconds, 0.27 MB
Application afterInitialise: 0.077 seconds, 2.79 MB
Application afterRoute: 0.105 seconds, 4.32 MB
Application afterDispatch: 1.116 seconds, 13.12 MB
Application afterRender: 1.496 seconds, 15.12 MB
Использование памяти
15912928
Зарегистрировано запросов: 1541

Стало
Код
Информация о профиле
Application afterLoad: 0.003 seconds, 0.27 MB
Application afterInitialise: 0.076 seconds, 2.76 MB
Application afterRoute: 0.104 seconds, 4.28 MB
Application afterDispatch: 1.035 seconds, 12.93 MB
Application afterRender: 1.428 seconds, 14.93 MB
Использование памяти
15708616
Зарегистрировано запросов: 1418


Далее. Отключил в модуле VirtueMart, который сбоку, дерево товаров - с 648 запросов стало 69. Т.е. боковое дерево формирует очень много запросов в базу. Надо с этим что-то делать...
« Последнее редактирование: 19.02.2010, 22:25:50 от cadet »
*

haword

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

soter

  • Осваиваюсь на форуме
  • 18
  • 2 / 0
В магазине 8000 товаров. около 70 категорий. При выводе 20 товаров в категории генерируется 350-420 запросов. При просмотре товара генерируется около 60 запросов.

Методом научного втыка были проведены следующие изменения.



ps_perm.php

Запрос

строка 35

         
Код
$db->query('SELECT group_id,group_name,group_level FROM `#__{vm}_auth_group` ORDER BY group_level');

         
ps_product.php

строка 654-656

      
Код
$q  = "SELECT `product_type_id` FROM `#__{vm}_product_product_type_xref` WHERE ";
$q .= "`product_id`=$product_id";
$db->query($q);

строка 823

      
Код
$db->query( "SELECT file_id FROM #__{vm}_product_files WHERE file_product_id='$product_id'" );

строка 1033-1035

         
Код
$q  = "SELECT COUNT(product_id) as num_rows FROM #__{vm}_product WHERE product_parent_id='$pid' ";
$db->query($q);
$db->next_record();

строка 1148-1153

      
Код
$q = "SELECT #__{vm}_vendor.vendor_name FROM #__{vm}_product, #__{vm}_vendor ";
$q .= "WHERE #__{vm}_product.product_id='$product_id' ";
$q .= "AND #__{vm}_vendor.vendor_id=#__{vm}_product.vendor_id";

$db->query($q);
$db->next_record();

строка 1217-1221

Код
		$q = "SELECT manufacturer_id FROM #__{vm}_product_mf_xref ";
$q .= "WHERE product_id='$product_id' ";

$db->query($q);
$db->next_record();

строка 1239-1244

Код
		$q = "SELECT mf_name,#__{vm}_manufacturer.manufacturer_id FROM #__{vm}_product_mf_xref,#__{vm}_manufacturer ";
$q .= "WHERE product_id='$product_id' ";
$q .= "AND #__{vm}_manufacturer.manufacturer_id=#__{vm}_product_mf_xref.manufacturer_id";

$db->query($q);
$db->next_record();

строка 1577-1579

            
Код
$q = 'SELECT tax_rate FROM #__{vm}_product, #__{vm}_tax_rate ';
$q .= 'WHERE product_tax_id=tax_rate_id AND product_id='.(int)$product_id;
$db->query($q);

строка 2324-2327

         
Код
$q = "SELECT amount,is_percent FROM #__{vm}_product,#__{vm}_product_discount ";
$q .= "WHERE product_id='$product_id' AND (start_date<='$starttime' OR start_date=0) AND (end_date>='$endofday' OR end_date=0) ";
$q .= "AND product_discount_id=discount_id";
$db->query( $q );

строка 2339-2340
Код
                $q = "SELECT product_parent_id FROM #__{vm}_product WHERE product_id=$product_id";
                $db->query($q);

строка 2342-2345

        
Код
$q = "SELECT amount,is_percent FROM #__{vm}_product,#__{vm}_product_discount ";
$q .= "WHERE product_id='".$db->f("product_parent_id")."' AND (start_date<='$starttime' OR start_date=0) AND (end_date>='$endofday' OR end_date=0) ";
$q .= "AND product_discount_id=discount_id";
db->query( $q );
строка 2645

   
Код
        $q .= "(#__{vm}_product.product_parent_id='' OR #__{vm}_product.product_parent_id='0') \n";

строка 2763-2772

         
Код
	$q = "SELECT product_name, category_name, c.category_flypage,product_s_desc,product_thumb_image ";
$q .= "FROM #__{vm}_product as p,#__{vm}_category as c,#__{vm}_product_category_xref as cx ";
$q .= "WHERE p.product_id = '$prod_id' ";
$q .= "AND c.category_id = '$category_id' ";
$q .= "AND p.product_id = cx.product_id ";
$q .= "AND c.category_id=cx.category_id ";
$q .= "AND p.product_publish='Y' ";
$q .= "AND c.category_publish='Y' ";
$q .= "LIMIT 0,1";
$db->query( $q );

файл ps_product_attribute.php

строка 263-264

Код
		$q = "SELECT product_id,product_name FROM #__{vm}_product WHERE product_parent_id='$product_id' AND product_publish='Y'" ;
$db->query($q.$q1);

строка 720-722

Код
		$q = "SELECT product_id, attribute, product_parent_id FROM #__{vm}_product WHERE product_id='$product_id'";
$db->query($q);
$db->next_record();
      
строка 725-727

Код
			$q = "SELECT product_id, attribute FROM #__{vm}_product WHERE product_id='$parent_id'";
$db->query($q);
$db->next_record();

строка 809-811

Код
		$q = "SELECT product_id, custom_attribute, product_parent_id FROM #__{vm}_product WHERE product_id='$product_id'";
$db->query($q);
$db->next_record();

строка 814-816
Код
			$q = "SELECT product_id, custom_attribute FROM #__{vm}_product WHERE product_id='$parent_id'";
$db->query($q);
$db->next_record();

файл ps_product_category.php

строка 926-933

Код
		$q = "SELECT category_id, category_thumb_image, category_child_id,category_name FROM #__{vm}_category,#__{vm}_category_xref ";
$q .= "WHERE #__{vm}_category_xref.category_parent_id='$category_id' ";
$q .= "AND #__{vm}_category.category_id=#__{vm}_category_xref.category_child_id ";
$q .= "AND #__{vm}_category.vendor_id='$ps_vendor_id' ";
$q .= "AND #__{vm}_category.category_publish='Y' ";
$q .= "ORDER BY #__{vm}_category.list_order, #__{vm}_category.category_name ASC";
$db->setQuery($q);
$db->query();

строка 1202-1206

Код
		$q = "SELECT category_id, category_description FROM #__{vm}_category ";
$q .= "WHERE category_id='$category_id' ";
$db->setQuery($q);   $db->query();

$db->next_record();
      
строка 1274-1278

Код
		$q = "SELECT category_id, category_name,category_parent_id FROM #__{vm}_category, #__{vm}_category_xref WHERE ";
$q .= "#__{vm}_category_xref.category_child_id='$category_id' ";
$q .= "AND #__{vm}_category.category_id='$category_id'";
$db->setQuery($q);   $db->query();
$db->next_record();

файл product.file_list.php

строка 604-611

Код
		$sql = 'SELECT DISTINCT file_id, file_mimetype, file_title, file_name'
. ' FROM `#__{vm}_product_files` WHERE ';
if( $exclude_filename ) {
$sql .= ' file_title != \''.$exclude_filename.'\' AND ';
}
$sql .= 'file_product_id = \''.$product_id.'\' AND file_published = \'1\' AND file_is_image = \'0\'';
$dbf->setQuery($sql);
$dbf->query();
      
строка 682
      
Код
$db->query( "SELECT * FROM `#__{vm}_product_files` WHERE `file_product_id`=".intval($pid)." AND `file_is_image`=1 AND `file_published`=1" );

строка 684-685

Код
			$db->query("SELECT product_parent_id FROM #__{vm}_product WHERE product_id=".intval($pid) );
$db->query( "SELECT * FROM `#__{vm}_product_files` WHERE `file_product_id`=".$db->f("product_parent_id")." AND `file_is_image`=1 AND `file_published`=1" );

строка 693

      
Код
$db->query( "SELECT * FROM `#__{vm}_product_files` WHERE `file_product_id`=".intval($pid)." AND `file_is_image`=0 AND `file_published`=1" );

строка 695

         
Код
$db->query("SELECT product_parent_id FROM #__{vm}_product WHERE product_id='$pid'");

строка 698

         
Код
$db->query( "SELECT * FROM `#__{vm}_product_files` WHERE `file_product_id`=".$db->f("product_parent_id")." AND `file_is_image`=0 AND `file_published`=1" );

файл ps_product_type.php

строка 514-515

Код
		$q = "SELECT * FROM #__{vm}_product_product_type_xref WHERE product_id='$product_id'";
$db->query($q);

файл ps_shopper_group.php

строка 372-375

Код
			$q = "SELECT shopper_group_id,shopper_group_discount FROM #__{vm}_shopper_group WHERE ";
$q .= "vendor_id='$vendor_id' AND `default`='1'";
$db->query( $q );
$db->next_record();

файл ps_vendor.php
заменить
строка 441-444

Код
		$q = "SELECT vendor_id, vendor_min_pov,vendor_name,vendor_store_name,contact_email,vendor_full_image, vendor_freeshipping,
vendor_address_1,vendor_address_2, vendor_url, vendor_city, vendor_state, vendor_country, country_2_code, country_3_code,
vendor_zip, vendor_phone, vendor_store_desc, vendor_currency, vendor_currency_display_style,
vendor_accepted_currencies, vendor_address_format, vendor_date_format, state_name
на

      
Код
$q = "SELECT vendor_id, vendor_currency, vendor_currency_display_style		
      

файл shop.product_details.php

строка 83-86

Код
$q = "SELECT product_sku, related_products FROM #__{vm}_product,#__{vm}_product_relations ";
$q .= "WHERE #__{vm}_product_relations.product_id='$product_id' AND product_publish='Y' ";
$q .= "AND FIND_IN_SET(#__{vm}_product.product_id, REPLACE(related_products, '|', ',' )) LIMIT 0, 4";
$db->query( $q );

файл shop_browse_queries.php

заменить строка 37-39

Код
$fieldnames = "`product_name`,`products_per_row`,`category_browsepage`,`category_flypage`,`#__{vm}_category`.`category_id`,
`#__{vm}_product`.`product_id`,`product_full_image`,`product_thumb_image`,`product_s_desc`,`product_parent_id`,`product_publish`,`product_in_stock`,`product_sku`,`author`,`location`,`publisher`,`god`,`pages`,`isbn`,`format`,`savepages`,`nomer`,`tip`,`product_url`,
`product_weight`,`product_weight_uom`,`product_length`,`product_width`,`product_height`,`product_lwh_uom`,`product_in_stock`,`product_available_date`,`product_availability`,`#__{vm}_product`.`mdate`, `#__{vm}_product`.`cdate`";

на

Код
$fieldnames = "`product_name`,`products_per_row`,`category_browsepage`,`category_flypage`,
`#__{vm}_product`.`product_id`,`product_s_desc`,`product_sku`,`author`,`location`,`publisher`,`god`,`pages`,`isbn`,`format`,`savepages`,`nomer`,`tip`
";


В результате:

Категории -  сократились с 350-420 до 120
Просмотр товара - с 60 до 30

Все удаленные запросы лично мне не были нужны, возможно кому-то пригодится.

http://www.onlinedisk.ru/file/363934/
« Последнее редактирование: 27.02.2010, 22:42:23 от soter »
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
так еще кое какие модификации, тестировал на общем количестве товара около 10000 штук, грузиться все быстрее из за уменьшения времени выборки товара по условиям из базы, если у кого есть большие объемы протестируйте.
http://files.mail.ru/UZEUQ6
« Последнее редактирование: 25.02.2010, 22:41:41 от haword »

Я не поленился зарегистрироваться на форуме, для того чтобы сказать
haword  - ВЫ ГЕНИЙЙЙЙЙЙЙЙЙЙЙЙЙ!
У нас открывались категории с товарами (от 400 до 4 000 товаров в категории) до 5 минут. Без шуток )
Мы искали решение убыстрения VirtueMart уже несколько недель.
Ваша модификация работает на все 100%  с базой ОБЪЕМОМ 300 000 позиций.
СПАСИБО!

Андрей
« Последнее редактирование: 27.02.2010, 17:40:17 от Myff2010 »
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
Да не за что. У меня все работало на 5 MySQL а вот на 4 MySQL при поиске товара шли те же тормоза, оптимизатор наверно неправильно работает, я пока не разобрался.
Блин а 300 000 это круто :) я думал все равно умрет на таком объеме. Ну вот хоть у одного заработало а то судя по нулевой реакции народа думал мало у кого заработало.
« Последнее редактирование: 28.02.2010, 00:06:02 от haword »

Как зальем весь объем, сообщим результаты на объеме 800.....
*

pr0zz

  • Новичок
  • 6
  • 0 / 0
Я не поленился зарегистрироваться на форуме, для того чтобы сказать
haword  - ВЫ ГЕНИЙЙЙЙЙЙЙЙЙЙЙЙЙ!
У нас открывались категории с товарами (от 400 до 4 000 товаров в категории) до 5 минут. Без шуток )
Мы искали решение убыстрения VirtueMart уже несколько недель.
Ваша модификация работает на все 100%  с базой ОБЪЕМОМ 300 000 позиций.
СПАСИБО!

Андрей
Какой именно вариант модификации от haword-а хорошо сработал? Последний?
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
последний должен был сработать, остальные просто уменьшали количество запросов к базе.
я валяюсь, пытаешься что то сделать, даешь попробовать а результатов ноль, все ждут что ли когда кто то другой проверит и все дружно попользуются?
« Последнее редактирование: 01.03.2010, 23:10:19 от haword »
*

pr0zz

  • Новичок
  • 6
  • 0 / 0
последний должен был сработать, остальные просто уменьшали количество запросов к базе.
я валяюсь, пытаешься что то сделать, даешь попробовать а результатов ноль, все ждут что ли когда кто то другой проверит и все дружно попользуются?
Спасибо за ответ, haword ))) может не у всех много товаров, а может и лень.
Мне в ближайший месяц только предстоит сделать магаз на виртумарте. Тогда о результатах отпишу... Но опять же по началу товаров будет максимум 500.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
2 haword я сравнил твой файл shop_browse_queries со своим, заметил только закомментированную переменную $count, а что еще изменено? может я чего проглядел?
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
выставь режим отладки в Joomla, проверь время выполнения,  потом подмени, и проверь время выполнения снова и сравни, желательно разницу сюда выдать :)

на всякий случай можно глянуть демку с изменениями сдесь http://www.bigcolor.ru/demo/shop.html
« Последнее редактирование: 03.03.2010, 10:50:00 от haword »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Я не для этого интересуюсь, мы работаем над компонентом JoosMart, основанном на VirtueMart 1.1.4, так вот по этому и интересуют детали, чтобы применить в своем компоненте, напрямки заменить файл уже не получится. А потестировать у меня нечем, работаю на пяти примерных товарах
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
зря так мало, как минимум 1000 товаров завести надо для нормального тестирования компонента. Проблема в условии:
Код
 WHERE (`demo_jos_vm_product_category_xref`.`product_id`=`demo_jos_vm_product`.`product_id` OR `demo_jos_vm_product_category_xref`.`product_id`=`demo_jos_vm_product`.`product_parent_id`)
......
AND `product_parent_id`=0

посему делаем проверку на введенную строчку поиска в $keyword и если она есть делаем так

Код
if( empty( $keyword ) ) {
        $where_clause[] = "(`#__{vm}_product_category_xref`.`product_id`=`#__{vm}_product`.`product_id`)";
      }
  else
      {
         $where_clause[] = "(`#__{vm}_product_category_xref`.`product_id`=`#__{vm}_product`.`product_id` OR `#__{vm}_product_category_xref`.`product_id`=`#__{vm}_product`.`product_parent_id`)";
      }
.....
if( empty( $keyword ) ) {
$where_clause[] = "`product_parent_id`=0 ";
.......
$count = 'SELECT COUNT(`product_sku`) AS num_rows FROM ('.$list.$q.' ) as vm';

это решение для Joomla и VirtueMart, для вас, если вы переделываете все прилично, нужно делать все немного другим путем, как я думаю было бы правильно чтобы не было такого глюка, надо подчиненным товарам создавать в таблице сопряжения групп и товара группу, а при выводе товара отфильтровывать по product_parent_id > 0
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
По хорошему SELECT COUNT(`product_sku`) надо заменить SELECT COUNT(*) тогда еще быстрее будет.
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
никакой разницы не было когда я тестил
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
По теории по-моему так: SELECT COUNT(`product_sku`) сначала создает массив product_sku потом его считает, SELECT COUNT(*) считает сразу.
*

haword

  • Захожу иногда
  • 124
  • 25 / 0
может быть и так, но время выполнения одноразового запроса к базе от 0.613 сек до 0.630 сек что так что эдак, плюс минус 17 миллисекунд большой роли не играют.
*

svarg

  • Захожу иногда
  • 178
  • 1 / 2
так еще кое какие модификации, тестировал на общем количестве товара около 10000 штук, грузиться все быстрее из за уменьшения времени выборки товара по условиям из базы, если у кого есть большие объемы протестируйте.
http://files.mail.ru/UZEUQ6

Пытался установить твой модуль, но Joomla пишет: Ошибка! Установочный XML-файл не найден в пакете
Как то по другому его устанавливать?
*

Sulpher

  • Живу я здесь
  • 2115
  • 401 / 16
  • Шаблоны и расширения Joomla
Пытался установить твой модуль, но Joomla пишет: Ошибка! Установочный XML-файл не найден в пакете
Как то по другому его устанавливать?
это не модуль, а патчи. перезалей ими текущие файлы, не забыв сделать резервную копию.
*

svarg

  • Захожу иногда
  • 178
  • 1 / 2
это не модуль, а патчи. перезалей ими текущие файлы, не забыв сделать резервную копию.
Я скачал zip файл, а там только один php файл shop_browse_queries.php . Я искал у себя такой же, но так и не нашёл, не подскажите путь?
Благодарю.
*

Sulpher

  • Живу я здесь
  • 2115
  • 401 / 16
  • Шаблоны и расширения Joomla
Я скачал zip файл, а там только один php файл shop_browse_queries.php . Я искал у себя такой же, но так и не нашёл, не подскажите путь?
Благодарю.
administrator/components/com_virtuemart/shop/shop_browse_queries.php
*

darkmaster

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
Не знаю как у вас но у меня на VМ 1.1.3 shop_browse_queries.php лежит здесь

/administrator/components/com_virtuemart/html/
*

koby84

  • Захожу иногда
  • 55
  • 1 / 0
при тестировании  hack_mod заметил такую особенность, при замене файла shop.browse.php подробное описание товара не открывет данную страницу а генерирует ошибку:
 Not Found

The requested URL / was not found on this server.

при возврате родного все стало на свои места.
*

koby84

  • Захожу иногда
  • 55
  • 1 / 0
Вопрос, когда ставлю в админке Режим отладки "да", то не могу зайти на сайт вылетает ошибка 500.
что можно сделать? может где то напартачил на ранних стадиях теса.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор bork

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

Автор 4kict

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

Автор Grig2009

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

Автор aleks_yug

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

Автор Nessy74

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