Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Магазин долго грузится


TpyHT
 Поделиться

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

Здравствуйте, есть магазин керамической плитки www.ridaprom.ru, товаров 7000, категорий 700, очень долго грузится первая страница, причем все очень оптимизировано, подгрузки аяксом и тп, долгих запросов к базе нет, непонятно почему все работает так медленно. Причем если проверять скорость загрузки сайта, то видно что около 5-6 секунд идет получение header'ов http, т.е. он ищет хост и получает хэдеры целых 5 секунд. Как я понимаю проблема может быть в генерации самой страницы, но непонятно почему так долго генерируется страница, как это можно проверить/просмотреть время генерации, куда поставить чтобы показывалось общее время генерации страницы (если засунуть в контроллер страницы, то не будет учитываться время генерации подключаемых модулей, контроллеров и тп). МОжет у кого то были такие проблемы, какие есть варианты решения?

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


У меня Ваш магазин загрузился достаточно быстро. Секунда-полторы. Может просто на тот момент были непорядки с хостингом?

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


index.php

Ставил в индексе уже пробовал, почемуто выдает буквально милисекунды время генерации, сайт долго грузится даже на денвере почему то.

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


В том то и дело что статика вообще летает, а вто хэдэры непонятно как, то за 2 секунды сайт грузиться, то по 10 секунд, непонятно вообще в индексе так и ставил сверху начальное время, снизу вывод конечного перед респонзом. И показывает малое время. В файле где хэдеры менял только тип на public, чтобы на несуществующих страницах отдавать 404 ошибку. Смотрел запросы к базе вообще все быстро. В чем дело не пойму, может из-за кэширования, там около 8000 файлов в папке кэш лежит.

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


Freelancer, напишите свою аську мне в личку или стукнитесь 877740, думаю так будет лучше общаться чем на форуме, если найдем решение выложим сюда для следующих поколений =)

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


$controller->dispatch($action, new Action('error/not_found'));

Эта строчка убивает 6 секунд времени =) как раз таки генерация страницы, чего впрочем и следовало ожидать.

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


да, но dispatch обрабатывает не один action, ещё пару pre_action точно.. у вас есть возможность замерить скорость каждого? возможно какой-нибудь seo_url тормозит

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

Вообщем замерил скорость генерации главной страницы, в контроллере common/home - 7 секунд на денвере.

Методом исключения нашел два места, где тупит по 3,5 секунды - 1 как это не смешно стандартная функция движка getCategories (не в модели, а где он пробегает все категории), видимо из-за количества категорий, хотя и не должно по идее, убрал эту функцию в аяксовый подгрузчик, сайт стал загружаться на 3-4 секунды быстрее, уже что-то.

Второе место, это собственно вывод

$this->response->setOutput($this->render(TRUE), $this->config->get('config_compression'));

Степень сжатия пробовал разную, все равно не помогает.

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


Проблема решена!

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

0.0131838321686 cart

0.025111913681 featured

0.0506310462952 column_right

0.307255029678 category

0.310930013657 column_left

0.00345706939697 footer

4.0133249759674 header

Таким образом лаг был в контроллере common/header, причем опять же в этой тупой функции getCategories, тупо отключил эту функцию и все летает. На форуме видел уже пост про это, но вывод категорий в хэдэре отключил еще при натягивании шаблона.

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

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


4.0133249759674 header

Таким образом лаг был в контроллере common/header, причем опять же в этой тупой функции getCategories, тупо отключил эту функцию и все летает. На форуме видел уже пост про это, но вывод категорий в хэдэре отключил еще при натягивании шаблона.

очень интересно.., а эта функция getCategories, где именно вызывается? (файл и номер строки)

пару раз на форуме проскакивали на неё жалобы, может будет время посмотрю что с ней не так.

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

да, летает =)

хороший пример магазина на opencart

в консоли ошибка

"NetworkError: 404 Not Found - http://www.ridaprom.ru/%3Cb%3ENotice%3C/b%3E:"

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

Спасибо за отзывы =)

getCategories вызывается в 122 строке файла catalog/controller/common/header.php . Функция собирает все категории для выдачи в строчке поиска (когда выбираешь в какой категории искать), у меня на сайте она еще подгружается и в поиске (тот что на главной странице с параметрами), в стандартном движке один раз в контроллере хэдера.

Сама функция

private function getCategories($parent_id, $level = 0) {

$level++;

$data = array();

$results = $this->model_catalog_category->getCategories($parent_id);

foreach ($results as $result) {

$data[] = array(

'category_id' => $result['category_id'],

'name' => str_repeat('    ', $level) . $result['name']

);

$children = $this->getCategories($result['category_id'], $level);

if ($children) {

$data = array_merge($data, $children);

}

}

return $data;

}

Получаем при 1000 категорий более 1000 закпросов к базе $this->model_catalog_category->getCategories . У меня в магазине 1 уровень вложенности можно по идее просто было бы убрать рекурсивный вызов для дочерних категорий, т.к. понятно что у коллекций плитки подктегорий нет. Вообщем это нужно как то оптимизировать в самом движке.

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


а версия движка?

как вариант можно читать все категории разом, в коде строить дерево и его же кешировать.

может даже есть смысл кешировать поддеревья.

будет время займусь на выходных

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

Версия 0.2.2.

Да, я про это и говорю, что нежели чем посылать тысячи запросов к базе при каждом открытии страницы (хотя там и не при каждом, ведь инфа береться из кэша, но один фиг брать из кэша 1000 категорий = 1000 файлов), лучше один раз взять все категории, и уже сортировать их. Не думаю что это будет сложно реализовать.

Эта функция используется в поиске, поставил просто условие

if ($level<2)

{

$children = $this->getCategories($result['category_id'], $level);

if ($children) {

$data = array_merge($data, $children);

}

}

Время загрузки уменьтшилось с 5 до 0,7 секунд на Денвере (аяксом загружается форма поиска).

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...

тестировал на 1000 категориях

старый способ__________новый

первый раз

11.091_________________0.481

последующие(кеш)

17.111_________________0.009

правда, ещё следует сделать поддержку seo

category_cache.zip

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

  • 2 недели спустя...

ТруНТ Вы зря проигнорировали сообщение

в консоли ошибка

"NetworkError: 404 Not Found - http://www.ridaprom.ru/%3Cb%3ENotice%3C/b%3E:"

Каждый раз при выводе страницы категории или производителя дополнительно генерится страница ошибки на которой список категорий так-же присутствует.

Намёк о том как весело серваку понятен?

А вывод товаров с помощью javascript сделан умышленно что-бы поисковики не видели товаров?

http://hghltd.yandex...3f3313b&keyno=0

http://webcache.goog...prom.ru&ct=clnk

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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

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

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