Перейти к содержанию
maxxdev

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

Рекомендуемые сообщения

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Индексация проблемы не решила 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Магазин http://knigiua.com категорий до 6 тыс. товаров 46647.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Индексация проблемы не решила :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 ?Спасибо за внимание

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.