- Автор темы
- #1
Немного сумбурно - просто нахожусь под впечатлением от своего первого магазина на Prest'e
Короче поставил я свой первый магазин на Prestashop (1.7.1.2). Тему купил на themeforest.
Всё работает, всё хорошо, тема красивая - но ... всё это работает как то медленно, не то что бы слишком, но ощутимо тормозит.
Сервер у меня хороший, VPS. Аналогичные магазины, с похожим дизайном, на самописной CMS, работают гораздо быстрее.
И решил я оптимизировать работу магазина.
Везде включил кеш (КОМБИНИРОВАНИЕ, КОМПРЕССИЯ И КЕШИРОВАНИЕ, SMARTY Кеш), для теста отключил ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ (Комбинации, Характеристики, Группы клиентов). Включил GZIP.
всё равно тормозит. Особенно первая страничка.
И решил я посмотреть поглубже, что именно тормозит то.
Погуглил и нашел директиву _PS_DEBUG_PROFILING_ которая включает режим отладки.
Для теста отключил кеш.
Включил директиву и .... и просто ох....нел.
Первая страничка сайта, та что больше всего тормозит, угадайте сколько там SQL запросов - тадааааам 702 SQL запроса.
Это вообще как так то а ... ну минуту другую побегал я по комнате, поудивлялся немножко и решил включить кеш
И что вы думаете - 805 SQL запросов !!!
Ну что стал смотреть на эти запросы.
Бросились в глаза обращения к табличкам с префиксом ps_xip (ps_xipcategory, ps_xipcategory_shop, ps_xipposts и т.д. )
Смотрю что бы это могло быть - а это блог (Xpert Prestashop Blog), который идёт в комплекте с темой.
В блоге 6 постов, на первой странице магазина выводятся 2 первых.
Отключаю модуль блога и ... запросов становится 474 queries
Первая страничка магазина стала загружатся малость шустрее
Но всё равно тормозит.
Смотрим дальше - Doubles
Показывает 52 запроса вида -
SELECT pa.`id_product`, a.`color`, pac.`id_product_attribute`, XX qty, a.`id_attribute`, al.`name`, IF(color = "", a.id_attribute, color) group_by
FROM `ps_product_attribute` pa
INNER JOIN ps_product_attribute_shop product_attribute_shop
ON (product_attribute_shop.id_product_attribute = pa.id_product_attribute AND product_attribute_shop.id_shop = XX)
JOIN `ps_product_attribute_combination` pac ON (pac.`id_product_attribute` = product_attribute_shop.`id_product_attribute`)
JOIN `ps_attribute` a ON (a.`id_attribute` = pac.`id_attribute`)
JOIN `ps_attribute_lang` al ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = XX)
JOIN `ps_attribute_group` ag ON (a.id_attribute_group = ag.`id_attribute_group`)
WHERE pa.`id_product` IN (XX) AND ag.`is_color_group` = XX
GROUP BY pa.`id_product`, a.`id_attribute`, `group_by` ORDER BY a.`position` ASC;
некоторые запросы обсолютно одинаковые, то есть запрашиваются атрибуты одних и тех же продуктов.
На первой странице магазина всего 30 продуктов, и я взял ИД продукта - к примеру 59 и посчитал в скольких местах он встречается - в 11 местах.
11 * 30 = 330
то есть просто включили цикл, и перебирают в цикле все продукты, и так десяток раз.
То же самое с категориями - куча запросов вида
SELECT *
FROM `ps_category` a
LEFT JOIN `ps_category_lang` `b` ON a.`id_category` = b.`id_category` AND b.`id_lang` = 4
LEFT JOIN `ps_category_shop` `c` ON a.`id_category` = c.`id_category` AND c.`id_shop` = 1
WHERE (a.`id_category` = 68) AND (b.`id_shop` = 1) LIMIT 1
то есть выбираются параметры категорий по одной ... в цикле !
Плюс есть такой запрос -
SELECT * FROM `ps_state` ORDER BY `name` ASC
, в таблице ps_state находятся штаты для США, типа Аляски и т.д.
Доставки в США у нас нет вообще но этот запрос вызывается на каждой странице - даже на всех текстовых страницах ( там то это зачем ??? ) ...
В общем народ, как вы работаете то с Prestashop?
Может быть я что то не то делаю, что то упустил не так настроил?
Короче поставил я свой первый магазин на Prestashop (1.7.1.2). Тему купил на themeforest.
Всё работает, всё хорошо, тема красивая - но ... всё это работает как то медленно, не то что бы слишком, но ощутимо тормозит.
Сервер у меня хороший, VPS. Аналогичные магазины, с похожим дизайном, на самописной CMS, работают гораздо быстрее.
И решил я оптимизировать работу магазина.
Везде включил кеш (КОМБИНИРОВАНИЕ, КОМПРЕССИЯ И КЕШИРОВАНИЕ, SMARTY Кеш), для теста отключил ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ (Комбинации, Характеристики, Группы клиентов). Включил GZIP.
всё равно тормозит. Особенно первая страничка.
И решил я посмотреть поглубже, что именно тормозит то.
Погуглил и нашел директиву _PS_DEBUG_PROFILING_ которая включает режим отладки.
Для теста отключил кеш.
Включил директиву и .... и просто ох....нел.
Первая страничка сайта, та что больше всего тормозит, угадайте сколько там SQL запросов - тадааааам 702 SQL запроса.
Это вообще как так то а ... ну минуту другую побегал я по комнате, поудивлялся немножко и решил включить кеш
И что вы думаете - 805 SQL запросов !!!
Ну что стал смотреть на эти запросы.
Бросились в глаза обращения к табличкам с префиксом ps_xip (ps_xipcategory, ps_xipcategory_shop, ps_xipposts и т.д. )
Смотрю что бы это могло быть - а это блог (Xpert Prestashop Blog), который идёт в комплекте с темой.
В блоге 6 постов, на первой странице магазина выводятся 2 первых.
Отключаю модуль блога и ... запросов становится 474 queries
Первая страничка магазина стала загружатся малость шустрее
Но всё равно тормозит.
Смотрим дальше - Doubles
Показывает 52 запроса вида -
SELECT pa.`id_product`, a.`color`, pac.`id_product_attribute`, XX qty, a.`id_attribute`, al.`name`, IF(color = "", a.id_attribute, color) group_by
FROM `ps_product_attribute` pa
INNER JOIN ps_product_attribute_shop product_attribute_shop
ON (product_attribute_shop.id_product_attribute = pa.id_product_attribute AND product_attribute_shop.id_shop = XX)
JOIN `ps_product_attribute_combination` pac ON (pac.`id_product_attribute` = product_attribute_shop.`id_product_attribute`)
JOIN `ps_attribute` a ON (a.`id_attribute` = pac.`id_attribute`)
JOIN `ps_attribute_lang` al ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = XX)
JOIN `ps_attribute_group` ag ON (a.id_attribute_group = ag.`id_attribute_group`)
WHERE pa.`id_product` IN (XX) AND ag.`is_color_group` = XX
GROUP BY pa.`id_product`, a.`id_attribute`, `group_by` ORDER BY a.`position` ASC;
некоторые запросы обсолютно одинаковые, то есть запрашиваются атрибуты одних и тех же продуктов.
На первой странице магазина всего 30 продуктов, и я взял ИД продукта - к примеру 59 и посчитал в скольких местах он встречается - в 11 местах.
11 * 30 = 330
то есть просто включили цикл, и перебирают в цикле все продукты, и так десяток раз.
То же самое с категориями - куча запросов вида
SELECT *
FROM `ps_category` a
LEFT JOIN `ps_category_lang` `b` ON a.`id_category` = b.`id_category` AND b.`id_lang` = 4
LEFT JOIN `ps_category_shop` `c` ON a.`id_category` = c.`id_category` AND c.`id_shop` = 1
WHERE (a.`id_category` = 68) AND (b.`id_shop` = 1) LIMIT 1
то есть выбираются параметры категорий по одной ... в цикле !
Плюс есть такой запрос -
SELECT * FROM `ps_state` ORDER BY `name` ASC
, в таблице ps_state находятся штаты для США, типа Аляски и т.д.
Доставки в США у нас нет вообще но этот запрос вызывается на каждой странице - даже на всех текстовых страницах ( там то это зачем ??? ) ...
В общем народ, как вы работаете то с Prestashop?
Может быть я что то не то делаю, что то упустил не так настроил?