Prestashop из коробки, ужас летящий на крыльях ночи и оптимизация.

Тема в разделе "PrestaShop", создана пользователем che02, 6 июл 2017.

Информация :
Приветствую гость, обрати внимание! Темы которые закреплены в разделах, в скором времени будут откреплены. Правила раздела PrestaShop

(Не актуальные темы) Каталоги:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
(Не актуальные темы) Поиск / Запросы:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
Полезная информация:Поддержка и помощь c PrestaShopУбираем ПрестаТраст, стучалки и прочую рекламуСовместные покупки модулей и шаблоновПеревод Prestashop и модулей
Модераторы: trace
  1. che02

    che02 Создатель

    Регистр.:
    12 мар 2007
    Сообщения:
    18
    Симпатии:
    6
    Немного сумбурно - просто нахожусь под впечатлением от своего первого магазина на 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?
    Может быть я что то не то делаю, что то упустил не так настроил?
     
    Kolfg, evgenij.sobolev и _sashok нравится это.
  2. duke1999

    duke1999

    Регистр.:
    11 сен 2012
    Сообщения:
    238
    Симпатии:
    135
    1.7 - это тупик для мазохистов, не надо на нём
     
    deejjay, trace и che02 нравится это.
  3. fortuner

    fortuner Нарушитель

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    903
    Это просто некачественная тема.
    Поставь стандартную, сравни и удивись :)
    Кроме того сам _PS_DEBUG_PROFILING_ пишет в бд всю эту техническую хрень за каким-то лешим. Так что во-первых: он немного некорректно отображает инфу, а во-вторых: если его отключить, то будет работать немного быстрее.

    Решения тут три:
    - использовать тему Warehouse
    - использовать тему Panda или Transformer
    - использовать стандартную тему и запилить ей дизайн. Я за последний вариант, т.к. гарантирована совместимость со всеми модулями с маркета, скорость работы выше и апдейты поставятся точно и без глюков.
     
    Kolfg, evgenij.sobolev, che02 и 2 другим нравится это.
  4. Mozozz

    Mozozz Создатель

    Регистр.:
    11 апр 2016
    Сообщения:
    23
    Симпатии:
    5
    Очень частое заблуждение - куплю тему и буду в шоколаде ) и поверьте это у вас еще цветочки. Идеальный вариант дефолтная тема + дизайн + контроль :) А, ну и да, 1.7 на мой взгляд сыровата еще.
     
    trace, che02 и _sashok нравится это.
  5. dsdscdscde

    dsdscdscde RD Нарушитель

    Заблокирован
    Регистр.:
    7 окт 2016
    Сообщения:
    270
    Симпатии:
    240
    у меня 1.6.1.14 дефолтная тема, мало дополнительных модулей, много кода удалено, хостинг от inmotion тарифный план power ииии все медленно и тупит. смотрю на сайты на magento они летают, уже думаю туда смотреть
     
    che02 нравится это.
  6. fortuner

    fortuner Нарушитель

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    903
    Нет проблем, мадженто - отличный движок. Ставил недавно.
    Весь код свален в кучу. В шаблоне html совмещен с PHP. Классов нет, написать модуль, найти модуль, заказать модуль - ну, пробуйте. Модули ставятся командной строкой. Бесплатная версия убогая. Без Компосера даже на локалке не ставится (да-да, компосер - это круто, командная строка - еще лучше, отвалите). PHP7 не поддерживает. Все файлы свалены в кучу, найти что-то и поправить под себя нереально геморно. Нет AJAX корзины - ткнул в кнопку "купить" - перешел на другую страницу, которая грузится полчаса. Работает на локалке (да, я его поставил) как с дискеты. Кеш очищается командной строкой. Преимущества в SEO - писали тут мне как-то знатоки - што ето, бред сивой кобылы. Еще есть масса преимуществ, например сообщество, которое всегда поможет.
    Переходите, классная ЦМСка.
    ПС. У меня преста и хостинг за $7. На LoadImpact 50 пользователей в секунду держит. Магия какая-то.
     
    deejjay, DaoKakao, evgenij.sobolev и 4 другим нравится это.
  7. che02

    che02 Создатель

    Регистр.:
    12 мар 2007
    Сообщения:
    18
    Симпатии:
    6
    Почитал ответы (поругал криворуких авторов темы, которую я купил :) ) и решил проверить дефолтную тему.
    Да дефолтная лучше, с точки зрения быстроты, но не намного.

    Для теста взял обычную страничку магазина, со списком продуктов. В категории 14 продуктов, на странице выводятся 10.
    В дефолтной теме количество запросов 275
    В шаблоне от themeforest 324

    То есть конечно лучше, но ЛЮДИИИ 275 запроза на страниче со списком из 10 продуктов это не реально МНОГО!!!
    Это просто пипец как много.

    В своей CMS для инет. магазина я беспокоился по поводу того что у меня на страничке 20 запросов, собирался то как то оптимизировать, конфиг вынести в файл и.т.д.
    А тут, тут просто фигачат запросы в цикл, это же каждый студент первокурсник знает, что так делать НЕЛЬЗЯ!!!

    Вот как пример
    14 запросов вида
    SELECT image_shop.`cover`, i.`id_image`, il.`legend`, i.`position`
    FROM `ps_image` i
    INNER JOIN ps_image_shop image_shop
    ON (image_shop.id_image = i.id_image AND image_shop.id_shop = XX)
    LEFT JOIN `ps_image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = XX)
    WHERE i.`id_product` = XX
    ORDER BY `position`

    выбор картинки продукта, во первых почему нельзя сделать так, что бы картинка продукта, которая используется в списке продуктов была в таблице продуктов, тогда такие запросы были бы вообще не нужны.
    Но раз сделали так то все эти 14 запросов можно заменить 1 просто написать

    SELECT image_shop.`cover`, i.`id_image`, il.`legend`, i.`position`
    FROM `ps_image` i
    INNER JOIN ps_image_shop image_shop
    ON (image_shop.id_image = i.id_image AND image_shop.id_shop = XX)
    LEFT JOIN `ps_image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = XX)
    WHERE i.`id_product` in (x1,x2,x3 .....)
    ORDER BY `position`


    И всё - это же азы MySQL ???

    Аналогично выбираются атрибуты с цветом, доступностью на складе, акционными ценами и т.д.
    То есть по этой технологии для 14 продуктов мы получаем 170 + запросов

    Их все можно заменить 5-7 запросами.

    Порылся в файлах Presta, посмотрел как они это делают - люди вообще не заморачиваютя.
    Просто цикл который перебирает все продукты.

    Нашел кстати интересную вещь, в Presta можно самому переопределить стандартные классы и контроллеры Presta.
    Попробую на досуге - отпишу как получится :)
    Даже самому стало интересно :)
     
    evgenij.sobolev нравится это.
  8. sergiykhd

    sergiykhd Sergiy

    Регистр.:
    17 апр 2013
    Сообщения:
    1.143
    Симпатии:
    868
    вы запросы считаете под включенным дебагом?
     
  9. che02

    che02 Создатель

    Регистр.:
    12 мар 2007
    Сообщения:
    18
    Симпатии:
    6
    нет дебаг ( Производительность -> Режим отладки ) я не включал
    просто ставлю для _PS_DEBUG_PROFILING_ = true

    Включил сейчас дебаг и запросов в дефолтной теме стало 273 queries :)
     
  10. sergiykhd

    sergiykhd Sergiy

    Регистр.:
    17 апр 2013
    Сообщения:
    1.143
    Симпатии:
    868
    ну так это нормально, отключите дебаг, включите кеш и проверяйте, вот пример на одном из моих работ:
    стр. категории, на странице 48 тов, фильтр
    Requests - 63
    Load time - 1.26 s
     
    che02 и evgenij.sobolev нравится это.