Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


TpyHT

Recommended Posts

Здравствуйте, есть магазин керамической плитки 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, где именно вызывается? (файл и номер строки)

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

Надіслати
Поділитися на інших сайтах

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

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 weeks later...

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

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

первый раз

11.091_________________0.481

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

17.111_________________0.009

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

category_cache.zip

Надіслати
Поділитися на інших сайтах

  • 2 weeks later...

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

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

"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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.