Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • entries
    7
  • comments
    54
  • views
    2,522

Opencart на стероїдах


Vladzimir

1,635 views

 Share

Переривши безліч інформації щодо кешу та кешування опенкарту, я так і не знайшов простого та бюджетного способу прискорити TTFB.

Час від часу я натрапляв на доповнення щодо кешу опенкарту для LiteSpeed.

Але чомусь я так і не знайшов жодної дієвої інструкції (та доповнення) як робити дієвий кеш опенкарту в Nginx, особливо якщо у вас шаблон залежний від типу пристрою.

І головною проблемою, яка постане перед вами при вирішенні цього питання це .... проксування куків з кешу і бекенду.

 

В кого є які думки з цього приводу?

 

Upd1

Дві функції які роблять твій сайт повільним

 

SmartBoost Before2.png

 Share

25 Comments


Recommended Comments

Хто знає точну адресу Даніеля?

Хочу йому надіслати гумового прутня.

  • +1 2
Link to comment
В 29.05.2023 в 14:49, Vladzimir сказав:

Хто знає точну адресу Даніеля?

Хочу йому надіслати гумового прутня.

:D

Link to comment
On 5/29/2023 at 2:49 PM, Vladzimir said:

Хто знає точну адресу Даніеля?

Хочу йому надіслати гумового прутня.

Copyright © 2023 OPENCART LTD, All rights reserved.

Our mailing address is:
OpenCart Limited,
Unit G 2/F Tower 2 Avignon,
1 Kwun Chui Road, So Kwan Wat,
Tuen Mun,
Hong Kong

  • +1 1
Link to comment
В 30.05.2023 в 12:18, rb2 сказав:

Copyright © 2023 OPENCART LTD, All rights reserved.

Та навіщо порядну людину на роботі турбувати?

Я хотів зробити все по домашньому.

  • +1 2
Link to comment

Тут і не дивно, що в перших місцях База Даних!

 

Памятаю, як фіксив ІМ який грузився 13-20секунд особливо це відчувалось в категоріях =)

 

А все через меню і модуль extension/category (Категорії) який був включений, клієнт жаліється чому сайт так довго грузить. Тематика авто, відповідно 600+ категорій це марки машини, різні моделі і т.д.

 

Відключив модуль Категорії ІМ стало легше, проте результат ще не такий як хотілось з 13-20сек до 4-7сек)

 

І щоб повністю побороти цю хворобу, переписали меню і модуль категорії під кеш, один раз закешував меню і видаєш цей результат для всього сайту, і сайт просто ожив з 13-20секунд загрузка зменшилась до 500мс.

 

 

Ще були випадки з ІМ на слабому хостингу з відкриванням сторінки товарів коли товарів більше 50к - все із за метода updateViewed

 

public function updateViewed($product_id) {
		$this->db->query("UPDATE " . DB_PREFIX . "product SET viewed = (viewed + 1) WHERE product_id = '" . (int)$product_id . "'");
}

 

На перший погляд метод простий і нічого не повинно тормозити, проте коли його видаляли сайт оживав=)

Просто перевели його на AJAX виклик після 5 секунд перегляду сторінки, і в контролері видаляєм виклик методу.

$this->model_catalog_product->updateViewed($this->request->get['product_id']);

 

  • +1 1
Link to comment
В 06.06.2023 в 14:37, Eldaeron сказав:

Тут і не дивно, що в перших місцях База Даних!

База це вузьке місце майже в кожній CMS, але Данька зміг реалізувати проблему там де її не повинно бути - це модифікація файлів і події! Разом вони дають до 50% оверхеду навіть з майже пустим каталогом.

Link to comment
06.06.2023 в 14:42, Vladzimir сказал:

це модифікація файлів

До чого тут модіфікація?

 

Link to comment
В 06.06.2023 в 15:37, chukcha сказав:

До чого тут модіфікація?

До того що в ній використовується is_file, результат якого не кешується системою, якщо файл відсутній. І таких викликів понад 1000 разів.

Link to comment
06.06.2023 в 14:37, Eldaeron сказал:

І щоб повністю побороти цю хворобу, переписали меню і модуль категорії під кеш, один раз закешував меню і видаєш цей результат для всього сайту, і сайт просто ожив з 13-20секунд загрузка зменшилась до 500мс.

 

Подскажите, а как можно переписать код меню, чтобы оно кешировалось? У меня на сайте тоже долго открываются страницы (примерно 2-5сек). Использую шаблон Аурус. Но если меняю шаблон на Default, то тот же сайт работает в 10 раз быстрее. Загрузка страниц (0,3-0,5сек). тоже автотематика и много категорий. Товаров, правда всего около 4000.

Link to comment
В 06.06.2023 в 18:35, shurc1 сказав:

Подскажите, а как можно переписать код меню, чтобы оно кешировалось? У меня на сайте тоже долго открываются страницы (примерно 2-5сек). Использую шаблон Аурус. Но если меняю шаблон на Default, то тот же сайт работает в 10 раз быстрее. Загрузка страниц (0,3-0,5сек). тоже автотематика и много категорий. Товаров, правда всего около 4000.

Треба дивитись код меню, версію opencart, якщо для 2.3 то меню в catalog/controller/common/header.php

 

Такий код:

$data['categories'] = array();

		$categories = $this->model_catalog_category->getCategories(0);

		foreach ($categories as $category) {
			if ($category['top']) {
				// Level 2
				$children_data = array();

				$children = $this->model_catalog_category->getCategories($category['category_id']);

				foreach ($children as $child) {
					$filter_data = array(
						'filter_category_id'  => $child['category_id'],
						'filter_sub_category' => true
					);

					$children_data[] = array(
						'name'  => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
						'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
					);
				}

				// Level 1
				$data['categories'][] = array(
					'name'     => $category['name'],
					'children' => $children_data,
					'column'   => $category['column'] ? $category['column'] : 1,
					'href'     => $this->url->link('product/category', 'path=' . $category['category_id'])
				);
			}
		}

 

Замінити на:

		$data['categories'] = array();

		if ($this->cache->get('header.categories.' . (int)$this->config->get('config_language_id'))) {
			$data['categories'] = $this->cache->get('header.categories.' . (int)$this->config->get('config_language_id'));
		} else {
			$categories = $this->model_catalog_category->getCategories(0);

			foreach ($categories as $category) {
				if ($category['top']) {
					// Level 2
					$children_data = array();

					$children = $this->model_catalog_category->getCategories($category['category_id']);

					foreach ($children as $child) {
						$filter_data = array(
							'filter_category_id'  => $child['category_id'],
							'filter_sub_category' => true
						);

						$children_data[] = array(
							'name'  => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
							'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
						);
					}

					// Level 1
					$data['categories'][] = array(
						'name'     => $category['name'],
						'children' => $children_data,
						'column'   => $category['column'] ? $category['column'] : 1,
						'href'     => $this->url->link('product/category', 'path=' . $category['category_id'])
					);
				}
			}

			$this->cache->set('header.categories.' . (int)$this->config->get('config_language_id'), $data['categories']);
		}

 

Про кеш можете почитати тут: 

 

  • +1 1
Link to comment
06.06.2023 в 15:40, Vladzimir сказал:

До того що в ній використовується is_file, результат якого не кешується системою, якщо файл відсутній. І таких викликів понад 1000 разів.

 

Это нивелируется NVME диском хостинга в нули. В полные нули!

80-120 ttfb без кешей, совершенно реальный показатель. Со страницами категорий сложнее, но тоже решаемо. 

И кстати, какая по вашему альтернатива ocmod или vqmod, превратить все в modx, привет изменения в базе и по кнопке выгружать набор исполняемых файлов?
Или с кешем изображений, привет WP - вот тебе три заготовленных миниатюры - ешь как хочешь?

 


По моему устоявшемуся мнению, проблема не в Opencart а в бомж-менталитете владельцев магазинов и инфоциган, которые рассказывают о том как в два клика расстаться с бедностью. Хотите быстрый магазин - никаких вопросов. Пользуйте не бюджетные сервера и ни в коем случае не шаред хостинги. Чуть чуть это все настроить. Чуть чуть разобраться в проблемах и магазина и кривых надстройках. И все... до свидания головная боль. А сколько раз там оно делает is_file, да кому какая разница, если лишиться этой головной боли стоит +15-20 долларов в месяц за нормальный хост?

Link to comment
06.06.2023 в 14:37, Eldaeron сказал:

Ще були випадки з ІМ на слабому хостингу з відкриванням сторінки товарів коли товарів більше 50к - все із за метода updateViewed

Подскажите, пожалуйста, а как Вы поняли, что проблема именно в этой функции? Как понять, какая функция тянет на себя львиную долю времени при открытии страницы?

Link to comment
06.06.2023 в 15:42, Vladzimir сказал:

Якось так

SmartBoost Before.png

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

Link to comment
В 07.06.2023 в 01:14, Yoda сказав:

Это нивелируется NVME диском хостинга в нули. В полные нули!

Ця поведінка нівелюється іншим способом. І вона майже не залежить від типу та швидкості дисків. Що і доводить профайлер.

Про це навіть в офдокументації написано https://www.php.net/manual/en/function.clearstatcache.php  "You should also note that PHP doesn't cache information about non-existent files."

Link to comment
В 07.06.2023 в 11:37, shurc1 сказав:

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

Профайлер xhprof

Link to comment
07.06.2023 в 11:40, Vladzimir сказал:

Ця поведінка нівелюється іншим способом. І вона майже не залежить від типу та швидкості дисків. Що і доводить профайлер.

Про це навіть в офдокументації написано https://www.php.net/manual/en/function.clearstatcache.php  "You should also note that PHP doesn't cache information about non-existent files."

 

 

Ну про это я в курсе

 Вопрос в другом. 

Какая альтернатива реализации is_file?

 

Держать таблицу с набором флагов созданных кешей изображений?

 

Так не очень вариант, если их будет 20к+

 

Выход какой? Альтернатива? 

Link to comment
В 07.06.2023 в 18:34, Yoda сказав:

Держать таблицу с набором флагов созданных кешей изображений?

Навіщо? is_file нормально працює коли файл існує. Проблема актуальна саме для modification коли перевіряється чи є модифікований файл.

Link to comment
07.06.2023 в 18:58, Vladzimir сказал:

Навіщо? is_file нормально працює коли файл існує. Проблема актуальна саме для modification коли перевіряється чи є модифікований файл.

Внимательно смотрим в tool/image модификаторы - детский лепет.

  • +1 1
Link to comment
06.06.2023 в 15:42, Vladzimir сказал:

Якось так

SmartBoost Before.png

 

Я так понимаю, что на этом скрине видно результат профилирования какой-то конкретной страницы на сайте (а не отдельного файла контроллера или файла модели) ? Т.е. вся страница загрузилась примерно за 0,4сек.

 

Подскажите, пожалуйста, как Вы это сделали? Где вы прописали (в каком файле и в каком месте) xhprof_enable(); и потом xhprof_disable() ?

 

У меня долго открываются странциы на сайте (примерно 3-5сек). И страницы товаров, и категорий, и даже информационные страницы - все долго загружаются. Но не могу понять, в чем причина.

Я установил xhprof себе на VPS.

Но не пойму, как правильно отпрофилировать какую-то конкретную страницу на сайте, которая долго грузится? Отдельный файл контроллера получается - просто в начале контрллера прописываю xhprof_enable() со всеми необходимыми параметрами, а в конце xhprof_disable().

А вот как всю страницу отпрофилировать не пойму.

Link to comment
В 11.08.2023 в 23:12, shurc1 сказав:

А вот как всю страницу отпрофилировать не пойму.

Ну так index.php жеж!

  • +1 1
Link to comment
11.08.2023 в 23:12, shurc1 сказал:

Где вы прописали (в каком файле и в каком месте) xhprof_enable(); и потом xhprof_disable() ?

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

Link to comment

Изображения переводить на ajax или загружать вообще из другого сервера.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.