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

fts

  • Новичок
  • 2
  • 0 / 0
Доброго времени суток!
К сожалению ссылка уже не активна - где взять последний хак от Haword ? Если есть, что то лучше подскажите
Хостинг заблочил сайт, нужно срочно что то решать
Было бы не плохо
*

AlexSims

  • Захожу иногда
  • 314
  • 38 / 0
  • кручу верчу
С фантазией плохо.
*

AlexSims

  • Захожу иногда
  • 314
  • 38 / 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/


Было бы неплохо написать, что было и что стало . А то строки то не у всех совпадают
С фантазией плохо.
*

A.Nitro

  • Осваиваюсь на форуме
  • 18
  • 0 / 0

Для начала убираем нафиг вывод картинок в тегах: echo ps_product::image_tag в файле browse_x. Это уже дает результат, а затем начинаем копать файл shop.browse.php

а можно про это по подробнее
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
имеется ввиду не использовать скрипт image_tag
в файле /components/com_virtuemart/themes/default/theme.php
вместо
Код
ps_product::image_tag($product['product_thumb_image'], $img_attributes, 0)
писать
Код
'<img src="/components/com_virtuemart/shop_image/product/'.$product['product_thumb_image'].'">'
и для большого фото также
*

A.Nitro

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
имеется ввиду не использовать скрипт image_tag
в файле /components/com_virtuemart/themes/default/theme.php
вместо
Код
ps_product::image_tag($product['product_thumb_image'], $img_attributes, 0)
писать
Код
'<img src="/components/com_virtuemart/shop_image/product/'.$product['product_thumb_image'].'">'
и для большого фото также


Спасибо, сделал.
но особого зрительного прироста не ощутил:)

PS менять как я понял надо не в дефолтной теме а в теме которая стоит на сайте!
« Последнее редактирование: 19.11.2012, 14:12:23 от A.Nitro »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
так еще кое какие модификации, тестировал на общем количестве товара около 10000 штук, грузиться все быстрее из за уменьшения времени выборки товара по условиям из базы, если у кого есть большие объемы протестируйте.
http://files.mail.ru/UZEUQ6
Архив нерабочий, весит 169 bytes. Будьте добры, перезалейте.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

iliya_art

  • Захожу иногда
  • 132
  • 7 / 0
Добрый день!, всех с праздником!
У меня такая проблема! (virtuemart 1.1.9)
Необходимо было вывести весь товар на одной странице (в каталоге всего 70 товаров)
Я создал пунк меню - тип VirtueMart - указал в настройках вывод страницы - shop.browse
Включил режим отладки:
-----------------------------------------
Информация о профиле
Application afterLoad: 0.000 seconds, 0.51 MB
Application afterInitialise: 0.054 seconds, 2.76 MB
Application afterRoute: 0.062 seconds, 3.24 MB
Application afterDispatch: 0.924 seconds, 11.19 MB
Application afterRender: 0.986 seconds, 13.39 MB
Использование памяти
14205392
Зарегистрировано запросов: 954
--------------------------------------------------
VirtueMart используется как каталог,
На странице и в категориях  - ссылка на карточку товара -  миниатюра изображения и название товара (ссылку "подробнее" краткое описание и т.д убрал из шаблона.)
Как я понимаю мне нужно править shop.browse.php.

Подскажите пожалуйста какие файлы еще необходимо править, и способы уменьшения количества запросов.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Для качественной работы по уменьшению запросов необходимо провести работу по удалению дублирующихся запросов, это уменьшит кол-во запросов в 2-3 рза, потом можно браться за ненужные запросы, это уже более индивидуальная коррекция. Для всего этого нужно знать структуру VirtueMart и свободно владеть php и MySQL.
*

umkaland

  • Новичок
  • 4
  • 0 / 0
Для качественной работы по уменьшению запросов необходимо провести работу по удалению дублирующихся запросов, это уменьшит кол-во запросов в 2-3 рза, потом можно браться за ненужные запросы, это уже более индивидуальная коррекция. Для всего этого нужно знать структуру VirtueMart и свободно владеть php и MySQL.

Arkadiy, можете помочь!! Нужна оптимизация коммерческого сайта. Тема по ссылке! Или в личку!
http://joomlaforum.ru/index.php/topic,257653.new.html#new
*

Edikxp

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Ребят помогите, есть сайтик на VirtueMart 1.4, с хостера пришло письмо что мол отключат если не оптимизирую запросы к БД. Слава что у хостера нормальная панель и там можно посмотреть эти медленные запросы, вот что получилось :

Текст запроса

Код
SELECT DISTINCT `product_name`,`products_per_row`,

Детали



Код
SELECT DISTINCT `product_name`,`products_per_row`,`category_browsepage`,`category_flypage`,`jos_vm_category`.`category_id`,
 
            `jos_vm_product`.`product_id`,`product_full_image`,`product_thumb_image`,`product_s_desc`,`product_parent_id`,`product_publish`,`product_in_stock`,`product_sku`, `product_url`,
 
            `product_weight`,`product_weight_uom`,`product_length`,`product_width`,`product_height`,`product_lwh_uom`,`product_in_stock`,`product_available_date`,`product_availability`,`jos_vm_product`.`mdate`, `jos_vm_product`.`cdate` FROM (`jos_vm_product`, `jos_vm_category`, `jos_vm_product_category_xref`,`jos_vm_shopper_group`) LEFT JOIN `jos_vm_product_price` ON `jos_vm_product`.`product_id` = `jos_vm_product_price`.`product_id` WHERE (`jos_vm_product_category_xref`.`product_id`=`jos_vm_product`.`product_id` OR `jos_vm_product_category_xref`.`product_id`=`jos_vm_product`.`product_parent_id`)
AND `jos_vm_product_category_xref`.`category_id`=`jos_vm_category`.`category_id`
AND `jos_vm_product_category_xref`.`category_id`=13
AND ((`jos_vm_product`.`product_id`=`jos_vm_product_price`.`product_id` AND `jos_vm_shopper_group`.`shopper_group_id`=`jos_vm_product_price`.`shopper_group_id`) OR `jos_vm_product_price`.`product_id` IS NULL)
AND `jos_vm_shopper_group`.`default` = 1
AND `product_parent_id`=0
AND `product_publish`='Y'
AND `category_publish`='Y'
GROUP BY `jos_vm_product`.`product_sku`
ORDER BY `jos_vm_product`.`product_name` ASC LIMIT 24, 12

Я понимаю что это основной запрос, который вытаскивает все  товары, но как его оптимизировать и что лишнего убрать ума не приложу.


Вот что показывает откладка когда  клацаешь на одну из категорий :

Код
Информация
Application afterLoad: 0.001 seconds, 0.38 MB
Application afterInitialise: 0.032 seconds, 4.37 MB
Application afterRoute: 0.040 seconds, 5.46 MB
Application afterDispatch: 3.482 seconds, 18.06 MB
Application afterRender: 4.014 seconds, 20.98 MB
Использование памяти
22150608
Зарегистрировано запросов - 285



Когда было мало посетителей то хостер на ругался, но как тока раскрутили и посещаемость перевалила в 500 людей в день то начала ругатся...  На сайте всего 3000 товаров. Магазин в режиме как каталог с формой заказа RSForm вообщем функционал по мин. у магазина...



   
« Последнее редактирование: 20.05.2013, 23:43:00 от Edikxp »
*

flashoff

  • Новичок
  • 4
  • 0 / 0
Други.  Подскажите какого вида должна быть адресная строка в броузере для прямого поиска в VirtueMart?
Типа  мойдомен.ку/search?=iphone (если хочу найти iphone).
*

kefalia

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

Выкладываю файл, присланный мне по e-mail haword'ом.
« Последнее редактирование: 15.04.2014, 17:33:26 от kefalia »
*

kasper9820

  • Захожу иногда
  • 127
  • 4 / 6
  • ...ISponsor!
помогите пожалуйста. Тему не нашел подходящую. Очень нужна ваша помощь

порушился стороннего ком-нта в базу VirtueMart 3.0.12

вот ошибка запроса
Код
1242 - Subquery returns more than 1 row SQL=SELECT vc.`virtuemart_calc_id` , vc.`calc_name` , vc.`calc_kind` , vc.`calc_value_mathop` , vc.`calc_value` , vc.`calc_currency` , vc.`ordering` FROM `j346_virtuemart_calcs` vc WHERE (vc.`shared`='1' OR vc.`virtuemart_vendor_id` = '1' ) AND vc.`published` ='1' AND ('13035' IN (SELECT virtuemart_category_id FROM j346_virtuemart_calc_categories WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`) OR (SELECT COUNT(virtuemart_category_id) FROM j346_virtuemart_calc_categories WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`)=0) AND ('30' IN (SELECT virtuemart_manufacturer_id FROM j346_virtuemart_calc_manufacturers WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`) OR (SELECT COUNT(virtuemart_manufacturer_id) FROM j346_virtuemart_calc_manufacturers WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`)=0) AND ( (SELECT virtuemart_shoppergroup_id FROM j346_virtuemart_vmuser_shoppergroups WHERE virtuemart_user_id='356') IN (SELECT virtuemart_shoppergroup_id FROM j346_virtuemart_calc_shoppergroups WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`) OR (SELECT COUNT(virtuemart_shoppergroup_id) FROM j346_virtuemart_calc_shoppergroups WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`)=0)AND (vc.`publish_up`='0000-00-00 00:00:00' OR vc.`publish_up` <= NOW() ) AND (vc.`publish_down`='0000-00-00 00:00:00' OR vc.`publish_down` >= NOW() ) ORDER BY vc.`ordering` ASC


а вот сам запрос

Код
	$q ="SELECT vc.`virtuemart_calc_id` , vc.`calc_name` , vc.`calc_kind` , vc.`calc_value_mathop` , vc.`calc_value` , vc.`calc_currency` ,  vc.`ordering` 
FROM `#__virtuemart_calcs` vc
WHERE vc.`published`='1'
AND (vc.`shared` ='1' OR vc.`virtuemart_vendor_id` = '".$vendor_id."' ) ";



$q .= "AND ('".$catid."' IN (SELECT virtuemart_category_id FROM #__virtuemart_calc_categories WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`)  OR  (SELECT COUNT(virtuemart_category_id) FROM #__virtuemart_calc_categories WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`)=0) " ;

$q .= "AND ('".$manufacturer_id."' IN (SELECT virtuemart_manufacturer_id FROM #__virtuemart_calc_manufacturers WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`)  OR  (SELECT COUNT(virtuemart_manufacturer_id) FROM #__virtuemart_calc_manufacturers WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`)=0) " ;

$q .= "AND ( (SELECT virtuemart_shoppergroup_id FROM #__virtuemart_vmuser_shoppergroups WHERE virtuemart_user_id='".$user->id."') IN (SELECT virtuemart_shoppergroup_id FROM #__virtuemart_calc_shoppergroups WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`)  OR  (SELECT COUNT(virtuemart_shoppergroup_id) FROM #__virtuemart_calc_shoppergroups WHERE virtuemart_calc_id = vc.`virtuemart_calc_id`)=0)" ;

$q .= "AND (vc.`publish_up`='0000-00-00 00:00:00' OR vc.`publish_up` <= NOW() ) ";
$q .= "AND (vc.`publish_down`='0000-00-00 00:00:00' OR vc.`publish_down` >= NOW() ) ";
$q .= "ORDER BY vc.`ordering` ASC";
$db->setQuery($q);


Помогите пожалуйста, такой сложный я сам не осилил
*

flyingspook

  • Moderator
  • 3590
  • 247 / 9
*

kasper9820

  • Захожу иногда
  • 127
  • 4 / 6
  • ...ISponsor!
kasper9820
Зачем во всех темах дублировать сообщение?

пардон, исправлюсь. Я в парочке. Думал так быстрее будет )
*

flyingspook

  • Moderator
  • 3590
  • 247 / 9
Быстрее это свой новый топик создать с правильным названием.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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