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

Очень медленно открывается магазин


jurevog

Recommended Posts

Здравствуйте.

 

Взял хостинг, установил на него магазин (15511 оцсторе), настроил - все нормально. Как только загрузил базу товаров (15000 позиций), любая страница магазина открывается 5 секунд, причем вот так:

- первые 3 секунды висит сообщение "Ожидание site.ru"

- потом буквально за 1-2 секунды загружается сайт (ограничение только моим каналом)

 

Другие сайты в первой фазе ожидания 0,5 - 1 секунду, потом идет загрузка в зависимости от веса сайта.

Сменил хостинг - время первой фазы даже ухудшилось, ожидание 3-4 секунды.

 

Техподдержка второго хостинга предлагает провести платную недешевую диагностику: "проблема характерна для неправильных прав на некоторые файлы, для не оптимизированной базы данных, и ещё по некоторым причинам"

 

Есть ли решения для этой ситуации?

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


1. Отключите подсчет количества товаров

2. КЕШ КЕШ КЕШ!

3. Индексы базы.

4. Сео про с кешированием, проверьте стоит или нет.

1. Отключено.

2. ЧТО ЧТО ЧТО КЭШ? Нет, правда, о каком кэше речь? Папку cache очищал. Очищал кэш картинок. Что еще должен сделать?

3. Могли бы подробнее сказать, что здесь сделать?

4. Обычный сеопро из сборки с этого сайта (оцсторе 1.5.5.1.1) - где в нем проверять?

 

или элементарно посмотрите вес фото на заднем фоне 

Не, тут все хорошо.

 

Вот например такие данные получил сейчас:

2014-02-17 18:40:26 - 3.06616 |    84 | /index.php?route=product/product&path=345_438&product_id=38631
2014-02-17 18:40:26 - --------------------
2014-02-17 18:40:26 - 0.00700 |     6 | /index.php?route=product/product/captcha
2014-02-17 18:40:26 - --------------------
2014-02-17 18:40:26 - 0.00962 |     8 | /index.php?route=product/product/review&product_id=38631
2014-02-17 18:40:26 - --------------------
2014-02-17 18:40:29 - ----------
2014-02-17 18:40:29 - 0.10264 |    21 | /home/user/www/site.ru/catalog/controller/module/category.php(45)
2014-02-17 18:40:29 - 0.28778 |     2 | /home/user/www/site.ru/catalog/controller/module/latest.php(32)
2014-02-17 18:40:29 - 2.21551 |    17 | /home/user/www/site.ru/catalog/controller/common/header.php(124)
2014-02-17 18:40:29 - ----------
2014-02-17 18:40:29 - 2.67347 |    78 | /
2014-02-17 18:40:31 - --------------------
2014-02-17 18:40:37 - ----------
2014-02-17 18:40:37 - 0.27066 |     2 | /home/user/www/site.ru/catalog/controller/product/category.php(213)
2014-02-17 18:40:37 - 2.25971 |    15 | /home/user/www/site.ru/catalog/controller/product/category.php(190)
2014-02-17 18:40:37 - 2.54628 |    17 | /home/user/www/site.ru/catalog/controller/common/header.php(124)
2014-02-17 18:40:37 - ----------
2014-02-17 18:40:37 - 5.40470 |   115 | /index.php?route=product/category&path=375
Надіслати
Поділитися на інших сайтах


По мотивам одной статьи удалил подсчет категорий вручную на всякий случай из catalog/controller/common/header.php и catalog/controllre/module/category.php

И сделал в SQL индексы:

 

 

ALTER TABLE oc_product_attribute ADD INDEX attribute_id ( attribute_id );
ALTER TABLE oc_product_attribute ADD INDEX language_id ( language_id );
 
ALTER TABLE oc_product_description ADD INDEX language_id ( language_id );
 
ALTER TABLE oc_product_image ADD INDEX product_id ( product_id );
ALTER TABLE oc_product_image ADD INDEX sort_order ( sort_order );
 
ALTER TABLE oc_product_option ADD INDEX product_id (product_id);
ALTER TABLE oc_product_option ADD INDEX option_id (option_id);
 
ALTER TABLE oc_product_option_value ADD INDEX product_option_id (product_option_id);
ALTER TABLE oc_product_option_value ADD INDEX product_id (product_id);
ALTER TABLE oc_product_option_value ADD INDEX option_id (option_id);
ALTER TABLE oc_product_option_value ADD INDEX option_value_id (option_value_id);
ALTER TABLE oc_product_option_value ADD INDEX subtract (subtract);
ALTER TABLE oc_product_option_value ADD INDEX quantity (quantity);
 
ALTER TABLE oc_product_reward ADD INDEX product_id ( product_id );
ALTER TABLE oc_product_reward ADD INDEX customer_group_id ( customer_group_id );
 
ALTER TABLE oc_product_to_category ADD INDEX category_id ( category_id );
 
ALTER TABLE oc_product_to_store ADD INDEX store_id ( store_id );
 
ALTER TABLE oc_setting ADD INDEX store_id ( store_id );
ALTER TABLE oc_setting ADD INDEX `group` ( `group` );
ALTER TABLE oc_setting ADD INDEX `key` ( `key` );
ALTER TABLE oc_setting ADD INDEX serialized ( serialized );
 
ALTER TABLE oc_url_alias ADD INDEX query ( query );

 

Стало вроде чуть быстрее, но не намного:

 

2014-02-17 19:18:24 - 0.26521 |     1 | /home/user/www/site.ru/catalog/controller/product/category.php(211)

2014-02-17 19:18:24 - 0.38979 |     2 | /home/user/www/site.ru/catalog/controller/product/category.php(213)
2014-02-17 19:18:24 - 3.02801 |    15 | /home/user/www/site.ru/catalog/controller/product/category.php(190)
2014-02-17 19:18:24 - ----------
2014-02-17 19:18:24 - 3.99588 |    98 | /index.php?route=product/category&path=375
Надіслати
Поділитися на інших сайтах


Удалил отовсюду подсчет товаров в категории, оставив только где надо для пагинации. Удалил кэши с помощью модуля csv import/export, почистил папку cache:

2014-02-17 21:25:26 - --------------------
2014-02-17 21:25:26 - 0.44476 |    56 | /index.php?route=common/home
2014-02-17 21:25:30 - --------------------
2014-02-17 21:25:30 - 0.60356 |    88 | /index.php?route=product/category&path=375
2014-02-17 21:25:35 - --------------------
2014-02-17 21:25:36 - 0.48379 |    88 | /index.php?route=product/category&path=339
2014-02-17 21:25:42 - --------------------
2014-02-17 21:25:42 - 0.61959 |    88 | /index.php?route=product/category&path=345
2014-02-17 21:25:54 - --------------------
2014-02-17 21:25:54 - 0.25074 |    61 | /index.php?route=product/product&path=345&product_id=39857
2014-02-17 21:25:55 - --------------------
2014-02-17 21:25:55 - 0.01083 |     6 | /index.php?route=product/product/captcha
2014-02-17 21:25:55 - --------------------
2014-02-17 21:25:55 - 0.00871 |     8 | /index.php?route=product/product/review&product_id=39857
2014-02-17 21:25:57 - --------------------
2014-02-17 21:25:58 - 0.51304 |    56 | /
2014-02-17 21:26:00 - --------------------
2014-02-17 21:26:00 - 0.05612 |    26 | /index.php?route=information/contact
2014-02-17 21:26:01 - --------------------
2014-02-17 21:26:01 - 0.01362 |     6 | /index.php?route=information/contact/captcha
2014-02-17 21:26:03 - --------------------
2014-02-17 21:26:03 - 0.55184 |   131 | /index.php?route=information/sitemap

Категория 375 содержит 2000 позиций. Вроде значительно улучшилось, но все равно не эталон

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


было

2014-02-17 18:40:37 - 5.40470 | 115 | /index.php?route=product/category&path=375
затем
2014-02-17 19:18:24 - 3.99588 |    98 | /index.php?route=product/category&path=375

стало

2014-02-17 21:25:30 - 0.60356 | 88 | /index.php?route=product/category&path=375

 

благодаря модулю вы сами, без затрат сумели увеличить скорость в ~6 раз. думаю не плохой результат

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

То есть, получается все дело было в подсчете товаров в категории?! Но ведь эта опция уже отключена в настройках.

 

И я не уверен, что те команды кэширования, что я ввел в SQL, как-то повлияли на скорость. Как думаете, они помогли? Хуже от них не могло стать?

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


Помогли индексы, однозначно,

кеш делать на выборки данных, так же как это частично по коду разбросано.

 

Вот есть у вас меню например. вы получаете список категорий...

 

$categories = $this->catalog_model bla bla bla

 

 

Везде по случаю надо добавить

$categories = $this->cache->get('menu');
if(!$categories) {
//Получаем данные
$categories = $this->catalog_model bla bla bla...

//Сохраняем в кеш
$categories = $this->cache->set('menu',$categories );
}

Этот метод эффективней чем использование кеша mysql, так как у него очень небольшое время жизни.

 

И почитайте вот это:

https://opencartforum.com/topic/3355-est-li-modul-analiza-log-failov/?do=findComment&comment=22909#entry22909

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

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

 

2. Согласен.

 

3. Речь шла о кешировании средствами самой MySql, некоторые настройки все таки чуть оживляют процесс.

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

Все эти моменты понятны и сьедены,

Вот другой момент, что делать с сео про...

Столкнулся с тем, что на 65 000 товаров, кеш урлов занимает 8.5Mb. - веселенькое дело...

 

И вот в этом методе:

		static $path = null;
		if (!is_array($path)) {
			$path = $this->cache->get('category.seopath');
			if (!is_array($path)) $path = array();
		}

		if (!isset($path[$category_id])) {
			$max_level = 10;

			$sql = "SELECT CONCAT_WS('_'";
			for ($i = $max_level-1; $i >= 0; --$i) {
				$sql .= ",t$i.category_id";
			}
			$sql .= ") AS path FROM " . DB_PREFIX . "category t0";
			for ($i = 1; $i < $max_level; ++$i) {
				$sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)";
			}
			$sql .= " WHERE t0.category_id = '" . $category_id . "'";

			$query = $this->db->query($sql);

			$path[$category_id] = $query->num_rows ? $query->row['path'] : false;

			$this->cache->set('category.seopath', $path);
		}

Возможно имеет смысл сделать одноразовую прегенерацию всех ссылок категорий, через формирование деревьев, а не пытаться посчитать отдельный кеш для каждой категории ?

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

там кеш формируется по мере необходимости, с этим проблем нет, но я бы заменил is_array($path) на !is_null($path)

в данном контексте это равнозначно

 

Там такая же необходимость, как формировать массив алиасов товаров!

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

Мне тоже SeoPro не нравится, уж больно трудоемкий способ формирования ссылок. Я думаю, что в таблице url_alias надо хранить не какие-то кейворды, а полноценные url категорий и товаров, как-то так.

SeoPro определенно стоит улучшить в следующем релизе.

 

А это мысль. Не проблема ведь при отключении включении ссылок (формировать с учетом категорий или без) переформировать все записи в таблице даже у 1000-1500 категорий.

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

Ну... для этого нужно писать свой модуль ЧПУ.

 

Такой подход хорош при принципе: один товар - одна категория.

 

Но таки -да - красиво.... Красивый урл одним запросом.

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

Ну... для этого нужно писать свой модуль ЧПУ.

 

Такой подход хорош при принципе: один товар - одна категория.

 

Но таки -да - красиво.... Красивый урл одним запросом.

 

А поле main в product_to_category, инопланетяне добавили ? 

Мне кажется из всех допилов OcStore - это самое существенное за всю историю.

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

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

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

×
×
  • Створити...

Important Information

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