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

Внезапно тормозит сайт


Recommended Posts

Всех приветствую, кто-нибудь может помочь?
Не помню, после чего началось, в журнале ошибок, ошибки давно были, но так не тупило, причем рандомно, с утра загрузка страницы 1.2 секунды, вечером 30!
​Файл slow.txt. и Журнал ошибок прилагаю. Спасибо.

 

 

slow.txt

Журнал ошибок.txt

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


Не всегда помогает

 

Нужно в модели в gettotalproducts добавить что то типа

if (!isset($data['limit'])){return 0;}

или вручную искать gettotalproducts и вырубать где не нужен

Змінено користувачем Otvet
  • +1 2
Надіслати
Поділитися на інших сайтах

 

Всех приветствую, кто-нибудь может помочь?

Не помню, после чего началось, в журнале ошибок, ошибки давно были, но так не тупило, причем рандомно, с утра загрузка страницы 1.2 секунды, вечером 30!

​Файл slow.txt. и Журнал ошибок прилагаю. Спасибо.

 

Если утром действительно было всего 1-2 сек на загрузку, а вечером тупит по пол минуты, то дело в в нагрузке на сервера вашего хостинга. Получается что хостер не справляется, сервера перегружаются от наплыва людей, которые лезут в интернет после работы...

 

А если нужна профессиональная оптимизация сайта, то обращайтесь к Snastik.

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

Otvet

Спасибо. Будем искать.

OldAine

Да у них на все один ответ, сервера работают в штатном режиме. Хотя хостинг Украина, вроде нормальный и тех поддержка есть. Сам уже думал, может поменять, но поможет ли...это вопрос.

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


Otvet

Спасибо. Будем искать.

OldAine

Да у них на все один ответ, сервера работают в штатном режиме. Хотя хостинг Украина, вроде нормальный и тех поддержка есть. Сам уже думал, может поменять, но поможет ли...это вопрос.

 

У вас:

1. Есть подсчет товаров в категориях (в модулях и т п)

2. Утром нагрузка на сервер меньше - он справляется с вашей "нагрузкой", вечером, когда соседей по серверу  "кошмарят" - нет. Но это действительно штатная работа дешевого тарифа.

3. Вас спасет или выделенный сервер или оптимизация специалиста

4. Советую: и  то и другое

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

Otvet

Спасибо. Будем искать.

OldAine

Да у них на все один ответ, сервера работают в штатном режиме. Хотя хостинг Украина, вроде нормальный и тех поддержка есть. Сам уже думал, может поменять, но поможет ли...это вопрос.

 

Кстати фактически нет никакой разницы в какой стране будет ваш хостинг, главное чтобы он был качественным.

 

Я держу сайты на российском Reg.ru и он справляется, но это пока.

Так-же рекомендую перейти на admin vps, говорят сайты становятся быстрее уже даже после переноса, без всяких оптимизаций. В будущем тоже планирую к ним уйти.

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

Кстати фактически нет никакой разницы в какой стране будет ваш хостинг, главное чтобы он был качественным.

 

Я держу сайты на российском Reg.ru и он справляется, но это пока.

Так-же рекомендую перейти на admin vps, говорят сайты становятся быстрее уже даже после переноса, без всяких оптимизаций. В будущем тоже планирую к ним уйти.

 

Для РФ - критичен хостинг в ru-ix  и днс там же.

Для UA - так же критичнен хостинг в зоне ua-ix но в Укр средняя скорость на душу населения все таки больше.

И расстояния поменьше.

Встречал товарищей которые хостятся в USA  - но простите, скорость передачи данных по проводам имеет физическую величину. И эта величина превращается на длинных растояних в реальные секунды.

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

Вообщем полегчало  :-D .  Дальше пишу, может кому-то поможет.  
Какой- то модуль запрашивал просчет товаров в файле header.php. а так как этот файл везде, то тормозило абсолютно все.
Благодаря ценным советам Otvet , нашел я где встречается gettotalproducts и оказалось в файле шаблона univer_menu.xml. После этого добавил строку предложенную Otvet (комментить нельзя, сразу ошибку выбивает) и случилось чудо. Сайт загрузился, меньше чем за секунду, что с ним никогда не бывало.
Otvet огромадное спасибо! Всем ответившим так же благодарность!

зы Ну и отдельное спасибо freelancer, за полезный мод.
зыы Со спасибо закончил) Непонятно только, какого этот файл запрашивал просчет.

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


Вообщем полегчало  :-D .  Дальше пишу, может кому-то поможет.  

Какой- то модуль запрашивал просчет товаров в файле header.php. а так как этот файл везде, то тормозило абсолютно все.

Благодаря ценным советам Otvet , нашел я где встречается gettotalproducts и оказалось в файле шаблона univer_menu.xml. После этого добавил строку предложенную Otvet (комментить нельзя, сразу ошибку выбивает) и случилось чудо. Сайт загрузился, меньше чем за секунду, что с ним никогда не бывало.

Otvet огромадное спасибо! Всем ответившим так же благодарность!

зы Ну и отдельное спасибо freelancer, за полезный мод.

зыы Со спасибо закончил) Непонятно только, какого этот файл запрашивал просчет.

 

 

Это недоделка 1.5

Но если в меню просчеты и можно выключить то в некоторых частях кода - не получится. Когда магазин разрастается до 3-4к товаров и на нем появляется трафик. Одним выкусыванием подсчета обойтись не получается в принципе.

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

snastik

Недолго музыка играла. У меня даже повыкусывать не получается. Неубиваемый просто подсчет! 
Проблема явно в этом, как определить что включает этот ..... подсчет.

slow (2).txt

Змінено користувачем Rataban
Надіслати
Поділитися на інших сайтах


он полностью и не будет убиваться, в контроллере категории должен оставаться

 

выложите функцию gettotalproducts сюда под спойлер

 

из файла catalog/model/catalog/product.php

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

Выложил. В 2 местах встречается.

 

public function getTotalProducts($data = array()) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
$sql = "SELECT COUNT(DISTINCT p.product_id) AS total";
 
 
public function getTotalProductSpecials() {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
$query = $this->db->query("SELECT COUNT(DISTINCT ps.product_id) AS total FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= '" . $this->NOW . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '" . $this->NOW . "') AND (ps.date_end = '0000-00-00' OR ps.date_end > '" . $this->NOW . "'))");
 
if (isset($query->row['total'])) {
return $query->row['total'];
} else {
return 0;
}
}
}
?>

 

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


Вроде так.

public function getTotalProducts($data = array()) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
$sql = "SELECT COUNT(DISTINCT p.product_id) AS total"; 
 
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (cp.category_id = p2c.category_id)";
} else {
$sql .= " FROM " . DB_PREFIX . "product_to_category p2c";
}
 
if (!empty($data['filter_filter'])) {
$sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)";
} else {
$sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)";
}
} else {
$sql .= " FROM " . DB_PREFIX . "product p";
}
 
$sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= '" . $this->NOW . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";
 
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'";
} else {
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
}
 
if (!empty($data['filter_filter'])) {
$implode = array();
 
$filters = explode(',', $data['filter_filter']);
 
foreach ($filters as $filter_id) {
$implode[] = (int)$filter_id;
}
 
$sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")";
}
}
 
if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
$sql .= " AND (";
 
if (!empty($data['filter_name'])) {
$implode = array();
 
$words = explode(' ', trim(preg_replace('/\s\s+/', ' ', $data['filter_name'])));
 
foreach ($words as $word) {
$implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'";
}
 
if ($implode) {
$sql .= " " . implode(" AND ", $implode) . "";
}
 
if (!empty($data['filter_description'])) {
$sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
}
}
 
if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
$sql .= " OR ";
}
 
if (!empty($data['filter_tag'])) {
$sql .= "pd.tag LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_tag'])) . "%'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.sku) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.upc) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.ean) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.jan) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.isbn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.mpn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
$sql .= ")";
}
 
if (!empty($data['filter_manufacturer_id'])) {
$sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
}
 
$query = $this->db->query($sql);
 
return $query->row['total'];
}
 

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


А если так?

public function getTotalProducts($data = array()) {

if ((!isset($data['limit']))&&(!isset($data['start'))){return 0;}
	else{
		if ($this->customer->isLogged()) {
		$customer_group_id = $this->customer->getCustomerGroupId();
		} else {
		$customer_group_id = $this->config->get('config_customer_group_id');
		}

		$sql = "SELECT COUNT(DISTINCT p.product_id) AS total"; 

		if (!empty($data['filter_category_id'])) {
		if (!empty($data['filter_sub_category'])) {
		$sql .= " FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (cp.category_id = p2c.category_id)";
		} else {
		$sql .= " FROM " . DB_PREFIX . "product_to_category p2c";
		}

		if (!empty($data['filter_filter'])) {
		$sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)";
		} else {
		$sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)";
		}
		} else {
		$sql .= " FROM " . DB_PREFIX . "product p";
		}

		$sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= '" . $this->NOW . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";

		if (!empty($data['filter_category_id'])) {
		if (!empty($data['filter_sub_category'])) {
		$sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'";
		} else {
		$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
		}

		if (!empty($data['filter_filter'])) {
		$implode = array();

		$filters = explode(',', $data['filter_filter']);

		foreach ($filters as $filter_id) {
		$implode[] = (int)$filter_id;
		}

		$sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")";
		}
		}

		if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
		$sql .= " AND (";

		if (!empty($data['filter_name'])) {
		$implode = array();

		$words = explode(' ', trim(preg_replace('/\s\s+/', ' ', $data['filter_name'])));

		foreach ($words as $word) {
		$implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'";
		}

		if ($implode) {
		$sql .= " " . implode(" AND ", $implode) . "";
		}

		if (!empty($data['filter_description'])) {
		$sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
		}
		}

		if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
		$sql .= " OR ";
		}

		if (!empty($data['filter_tag'])) {
		$sql .= "pd.tag LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_tag'])) . "%'";
		}

		if (!empty($data['filter_name'])) {
		$sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
		}

		if (!empty($data['filter_name'])) {
		$sql .= " OR LCASE(p.sku) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
		}

		if (!empty($data['filter_name'])) {
		$sql .= " OR LCASE(p.upc) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
		}

		if (!empty($data['filter_name'])) {
		$sql .= " OR LCASE(p.ean) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
		}

		if (!empty($data['filter_name'])) {
		$sql .= " OR LCASE(p.jan) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
		}

		if (!empty($data['filter_name'])) {
		$sql .= " OR LCASE(p.isbn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
		}

		if (!empty($data['filter_name'])) {
		$sql .= " OR LCASE(p.mpn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
		}

		$sql .= ")";
		}

		if (!empty($data['filter_manufacturer_id'])) {
		$sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
		}

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

		return $query->row['total'];
	}
}

Змінено користувачем Otvet
Надіслати
Поділитися на інших сайтах

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

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


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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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