Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

4000 товаров - сильно тормозит


Recommended Posts

Проект запущен на локалхост. Apache 2.2MySQL 5.14000 товаров295 категорийПри попытке открыть категорию или просмотреть товар, задержка примерно в 12 секунд!!!Куда копать?

Link to post
Share on other sites

Индексация проблемы не решила 8-)

У меня на порядок больше категорий и товаров, только проставление индексов на категории улучшило ситуацию.
CREATE TABLE `oc_category` (  `category_id` INT(11) NOT NULL AUTO_INCREMENT,  `image` VARCHAR(255) DEFAULT NULL,  `parent_id` INT(11) NOT NULL DEFAULT '0',  `sort_order` INT(3) NOT NULL DEFAULT '0',  `date_added` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',  `date_modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',  `status` INT(1) NOT NULL DEFAULT '1',  PRIMARY KEY (`category_id`),  KEY `parent_id` (`parent_id`),  KEY `status` (`status`)) ENGINE=MYISAM AUTO_INCREMENT=110174 DEFAULT CHARSET=utf8
Link to post
Share on other sites

Улучшило насколько? Можно ссылку на ваш магазин?

Link to post
Share on other sites

Тормоза из-за ф-ии private function getCategories($parent_id, $level = 0) в catalogcontrollercommonheader.phpПока не совсем понятно ее назначение. Ф-я является рекурсивной и в каждой рекурсии идет обращение к БД.Если необходимо получить дерево категорий, то целесообразние написать 1 запрос SQL.PSЕсли тело ф-ии закоментить и всегда возвращать пустой массив, то на первый взгляд все работает корректно и БЕЗ каких либо томозов :lol:

Link to post
Share on other sites

генерирует выпадающий список для поиска, если проблему решает, отключай и из header.tpl выкинь этот список (поиск будет вестись по всем категориям правда)

Link to post
Share on other sites

Улучшило насколько? Можно ссылку на ваш магазин?

Магазин http://knigiua.com категорий до 6 тыс. товаров 46647.
Link to post
Share on other sites

Тормоза из-за ф-ии private function getCategories($parent_id, $level = 0) в catalogcontrollercommonheader.phpПока не совсем понятно ее назначение. Ф-я является рекурсивной и в каждой рекурсии идет обращение к БД.Если необходимо получить дерево категорий, то целесообразние написать 1 запрос SQL.PSЕсли тело ф-ии закоментить и всегда возвращать пустой массив, то на первый взгляд все работает корректно и БЕЗ каких либо томозов :lol:

Да, при большом кол-ве категорий из-за этого возникают тормоза, так как генерятся текстовые файлы, для кэширования, я бы правда переделал это не на текстовые файлы, а на что-то типа nosql. тогда бы это все летало.
Link to post
Share on other sites

Улучшило насколько? Можно ссылку на ваш магазин?

Магазин http://knigiua.com категорий до 6 тыс. товаров 46647.
Вам, наверно, тоже было бы логично убрать этот ниспадающий список, все равно найти в нем нужную категорию не представляется возможным =)
Link to post
Share on other sites

Тормоза из-за ф-ии private function getCategories($parent_id, $level = 0) в catalogcontrollercommonheader.phpПока не совсем понятно ее назначение. Ф-я является рекурсивной и в каждой рекурсии идет обращение к БД.Если необходимо получить дерево категорий, то целесообразние написать 1 запрос SQL.PSЕсли тело ф-ии закоментить и всегда возвращать пустой массив, то на первый взгляд все работает корректно и БЕЗ каких либо томозов :lol:

Да, при большом кол-ве категорий из-за этого возникают тормоза, так как генерятся текстовые файлы, для кэширования, я бы правда переделал это не на текстовые файлы, а на что-то типа nosql. тогда бы это все летало.
На это можно рассчитывать? Было бы здорово! :lol:
Link to post
Share on other sites

Индексация проблемы не решила :lol:

У меня на порядок больше категорий и товаров, только проставление индексов на категории улучшило ситуацию.
CREATE TABLE `oc_category` (  `category_id` INT(11) NOT NULL AUTO_INCREMENT,  `image` VARCHAR(255) DEFAULT NULL,  `parent_id` INT(11) NOT NULL DEFAULT '0',  `sort_order` INT(3) NOT NULL DEFAULT '0',  `date_added` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',  `date_modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',  `status` INT(1) NOT NULL DEFAULT '1',  PRIMARY KEY (`category_id`),  KEY `parent_id` (`parent_id`),  KEY `status` (`status`)) ENGINE=MYISAM AUTO_INCREMENT=110174 DEFAULT CHARSET=utf8
Позвольте поинтересоваться, зачем вы создаете первичный ключ и ещё два ключа? Разве для индексации это необходимо?В созданной мною теме (viewtopic.php?f=15&t=903&p=5659) синтаксис индексации БД отличается от вашего. Какое решение правильнее? И ещё, зачем указывать это:ENGINE=MYISAM AUTO_INCREMENT=110174 DEFAULT CHARSET=utf8 ?Спасибо за внимание
Link to post
Share on other sites

Насколько я понял, это идентичные запросы:ALTER TABLE oc_product ADD INDEX i_product_id (product_id); иKEY `oc_product ` (`oc_product `)Правильно?И ещё вопрос по поводу авто-инкремента: зачем такое число большое? Можно же было начать с единицы, если уж по новой создается таблица?

Link to post
Share on other sites

Неужели никто не знает? Это же архиважный вопрос — повышение производительности магазина, его бы стоило осветить максимально подробно.

Link to post
Share on other sites

Насколько я понял, это идентичные запросы:ALTER TABLE oc_product ADD INDEX i_product_id (product_id); иKEY `oc_product ` (`oc_product `)Правильно?И ещё вопрос по поводу авто-инкремента: зачем такое число большое? Можно же было начать с единицы, если уж по новой создается таблица?

1. Идентичны. Но по умолчанию product_id является первичным ключом и уже индексирован. Поэтому в данном случае у вас получится 2 одинаковых индекса.2. Авто инкремент такой начинается с единицы, но когда вы переносите Бд, то автоинкримент начинается с последнего id в базе.Что тормозит я уже описал, отключите эту функцию и почувствуйте разницу.
Link to post
Share on other sites

Насколько я понял, это идентичные запросы:ALTER TABLE oc_product ADD INDEX i_product_id (product_id); иKEY `oc_product ` (`oc_product `)Правильно?И ещё вопрос по поводу авто-инкремента: зачем такое число большое? Можно же было начать с единицы, если уж по новой создается таблица?

1. Идентичны. Но по умолчанию product_id является первичным ключом и уже индексирован. Поэтому в данном случае у вас получится 2 одинаковых индекса.2. Авто инкремент такой начинается с единицы, но когда вы переносите Бд, то автоинкримент начинается с последнего id в базе.Что тормозит я уже описал, отключите эту функцию и почувствуйте разницу.
О, за такой ответ спасибо.Кстати, модуль PopupCategory (который визуально повторяет удобную структуру категорий на амазоне) якобы использует кеширование, но у меня что с ним, что без него — даже на локалхосте после загрузки страницы с большим количеством категорий (которые как то по своему обрабатываются в этом модуле) браузер думает секунд 10. А со стандартным модулем категорий, который выводит их в не очень удобном виде (при большом кол-ве категорий) страница загружается сразу.
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.