[Помогите] Как уменьшить время загрузки страниц категории?

Тема в разделе "OpenCart", создана пользователем alex5151, 17 июн 2013.

  1. alex5151

    alex5151

    Регистрация:
    15 ноя 2012
    Сообщения:
    165
    Симпатии:
    26
    Магазин на 1.5.4.1. Товаров чуть меньше 4500. Категорий 32. Включен seo pro.

    Через фаербаг проверяю время загрузки одной из категории:
    хостинг: GET/noutbook/ размер: 61.3 Кб время: 8c±2c
    денвер: GET/noutbook/ размер: 61.3 Кб время: 4c±1c
    при отключении seo pro время загрузки уменьшается почти в 2 раза.

    Разве это нормально при таком количестве товаров, что же будет при 10 тыс. товаров? Что в этом случаи можно сделать?

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

    Или возможно необходимо закешировать запросы (или они и так кешируются?) В магазине количество товаров при покупке не вычитается, а потому в категории всегда одно и тоже количество товаров, обновляются раз в неделю. Поэтому зачем при каждой загрузке страницы делать такой запрос. SEO_URL так вообще не меняются.
     
  2. Bnopen

    Bnopen Команда форума

    Регистрация:
    3 мар 2013
    Сообщения:
    1.155
    Симпатии:
    514
    alex5151, есть мод, где реализовано кеширование запросов к таблице url_alias
     
  3. alex5151

    alex5151

    Регистрация:
    15 ноя 2012
    Сообщения:
    165
    Симпатии:
    26
    Странно, но после установки на денвере разницы нет, кэш чистил.
    Кстати после добавления в \usr\local\mysql-5.5\my.ini строки query_cache_size = 64M время при повторной загрузки страницы уменьшается почти в 2 раза, как я понимаю часть запросов кэшируется.
    Однако на хостинге вносить изменения в конфиг mysql возможность у меня отсутствует...
    Есть ли ещё способ?
     
  4. Spartak

    Spartak

    Регистрация:
    23 дек 2012
    Сообщения:
    151
    Симпатии:
    57
    Добрый день
    Просто, как вариант, может быть вам стоит заодно подумать о выключении подсчета количества товаров?
     
  5. alex5151

    alex5151

    Регистрация:
    15 ноя 2012
    Сообщения:
    165
    Симпатии:
    26
    Подсчёт количества товаров давно вырезал...
     
  6. Alexxcha

    Alexxcha

    Регистрация:
    21 ноя 2012
    Сообщения:
    130
    Симпатии:
    36
    Было такое - первое что сделал - вырезал подсчет и товаров и категорий, второе стал искать скрипты и стили загружаемые со сторонних ресурсов - перелил их к себе на хост, третье - воспользовался PageSpeed и после его анализа исключил еще несколько тупящих моментов...
     
  7. denya

    denya

    Регистрация:
    2 мар 2013
    Сообщения:
    129
    Симпатии:
    35
    Используйте инструмент для поиска проблем. Покажет что тормозит и каких именно запросов много.
     
    alex5151 нравится это.
  8. alex5151

    alex5151

    Регистрация:
    15 ноя 2012
    Сообщения:
    165
    Симпатии:
    26
    Посмотрел сколько запросов формируется при загрузке страницы категории. Всего получилось чуть больше 250 шт, причём 190 из них делает модуль "Текстовые атрибуты". И это для вывода 4-х атрибутов в каждом товаре. После его отключения претензий к скорости загрузки больше не имею.
    Может это из-за большого количества атрибутов, или какой-то личный баг, но модуль увеличивал время загрузки страницы в несколько десятков раз. Вот так.
    P.S. вопрос оптимизации запросов остаётся открытым. Может кто-нибудь поделится своими наработками в этом направлении?
     
  9. denya

    denya

    Регистрация:
    2 мар 2013
    Сообщения:
    129
    Симпатии:
    35
    Оптимизация запросов - это сокращение количества запросов путем разумного кеширования. Это то, что можно сделать, не влезая глубоко в движок сайта. Как кешировать - выбирать вам исходя из возможностей. Я закешировал псевдостатические данные, которые очень редко меняются - данные информации, которые порождают около 5 запросов на генерации каждой страницы. Таких мест каждый может выделить достаточное количество.
     
  10. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    denya, Оптимизация - не совсем то что Вы думаете, как можно сократить запрос если он только 1 и достает все что надо из 1 таблицы, будете делать 2-3 запроса и доставать по очереди? Не самый лучший выход... Оптимизация ето максимально упрощена конструкция выборки данных, ето если писать так как Вы...
    И хотелось бы знать как Вы закешируете запрос который выполняется при поиске на сайте?
     
  11. denya

    denya

    Регистрация:
    2 мар 2013
    Сообщения:
    129
    Симпатии:
    35
    Если запрос 1, то понятное дело, что практически ничего не сделаешь, но я привел пример, когда у нас идет обращение к таблице information за каждой частью "информации" - "доставка", "о нас" и т.д. итого происходит около 5 запросов с соединением таблиц в базе. Что если мы закешируем результат запроса для всех "информаций" и поместим хеш в статик переменную (разместим в памяти), тогда, прочитав кеш с диска единожды мы получим экономию на этих 5 запросах - нам не нужно будет пинать базу по этому поводу, оставив ресурсы на более затратные выборки

    Я и не писал, что все можно закешировать :wink:
     
  12. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    denya, В information нет больших данных и нет таких глобальных запросов как Вы пишете об етом...
    Хоть убейте но не верю что из за етих запросов получения данных из information система тормозит.
    Тормозит из за рекурсивного дерева категорий и получения списков товаров.
    Про поиск молчу как рыба, так как там вопше...
     
  13. denya

    denya

    Регистрация:
    2 мар 2013
    Сообщения:
    129
    Симпатии:
    35
    Yuriy_Z, согласен с Вами, что "информация" - это мелочи, но, как я понял, человек ищет пути любой оптимизации. На его примере отключение 1 модуля сняло значительную нагрузку на БД. Тоже встречал такие модули - например OCU Waitlist, который проверяет наличие каждого товара в листе ожидания. Единой кнопки "Ускорить" нигде нет :smile:
    Поиск - это вечная проблема у всех, особенно полнотекстовый.
     
  14. brigadir

    brigadir

    Регистрация:
    23 ноя 2012
    Сообщения:
    38
    Симпатии:
    5
    Если строка поиска с выборам категорий - то вкладку категории надо снести - будет быстрее