Ускоряване на OpenCart електронен магазин (Част 1)

OpenCart е една от най-използваните системи за създаване на онлайн магазини от нашите клиенти (6.3% от всички инсталирани CMS платформи). Тъй като често получаваме запитвания за оптимизация, свързани със скоростта, решихме да споделим с вас няколко насоки за това как да направите своя OpenCart онлайн магазин по-бърз.

Множеството извършени проверки по този въпрос и натрупаният вече опит ни показаха една от най-често срещаните причини за бавно зареждане. Системата на OpenCart на много места в кода си изчислява броя на продуктите за всяка една категория. При всяко зареждане на страница от сайта, изчисляването се извършва отново, а това само по себе си представлява по една SQL заявка към базата данни за всяка отделна категория. Колкото повече стават категориите и продуктите във вашия онлайн магазин, толкова повече се забавя неговото зареждане.

Въпреки че през администрацията на сайта може да се деактивира показването на броя продукти, това не спира постоянното изпълнение на SQL заявките.

Оптимизацията е подходяща за онлайн магазини с голям брой категории и продукти.

С един куршум два заека!
Със спирането на това постоянно изчисляване, освен че зареждането на сайта се ускорява,  се намалява и генерираното процесорно време от хостинг акаунта.

Оптимизацията може да се извърши по два начина – чрез допълнителни плъгини към OpenCart или чрез ръчна настройка.

Препоръчваме втория начин – ръчна оптимизация на OpenCart. При първия начин, когато се ползва плъгин, се извършват промени по базата данни и в някои системни файлове на OpenCart. Какво точно и къде се прилага като промяна, може да не е описано в помощната информация на плъгина, следователно няма да може да се върнат направените промени. Когато вие извършите оптимизацията ръчно, ще сте сигурни кой точно файл е редактиран и ще можете да върнете промените, в случай че се наложи. Ще извършвате оптимизацията стъпка по стъпка и ако нещо не се сработи, ще можете веднага да възстановите предишното състояние на дадения файл.

Описаната ръчна оптимизация е извършена на OpenCart версия 1.5.6.4, но може да се приложи и на по-старите версии 1.5.х.

Оптимизация чрез допълнителен плъгин на OpenCart

В Уеб може да се намерят различни плъгини, платени и безплатни, с които да направите оптимизация на вашия онлайн магазин. Един такъв плъгин, в който са събрани някои от ръчните оптимизации за OpenCart, е Opencart Turbo.

Друг плъгин, който спира показването и изчисляването на броя продукти по категории, e Product Count True Disabling / Speed Up.

Съвет: Aко решите да тествате с такива плъгини, преди това направете бекъп на сайта (базата данни и файловете).

Ръчна оптимизация

Оптимизацията се състои в редакцията на три файла на OpenCart. С подмяната на няколко реда в тези файлове ще се спре постоянното изчисляване и показването на броя продукти по категориите.

Забележка: С редакцията на файловете броят на продуктите по категории няма да се показва повече. Ако вие изрично искате броят на продуктите да се показва, не прилагайте тази оптимизация. Във връзка с това в следваща статия за оптимизация на OpenCart ще опишем как може да се извърши оптимизация, така че броят на продуктите да се показва, но да се намали забавянето на сайта.

Още нещо, което е много важно – преди редакцията на всеки един файл, направете негово копие. Така ще можете да възстановите състоянието му, без редакциите.

Преди да започне ръчната редакция на системни файлове, деактивирайте показването на броя продукти през административния панел на OpenCart -> Системни -> Настройки -> Общи (Показване броя продукти в категория – изберете Не).

След това се подгответе за малка редакция в три файла на системата:

catalog/controller/product/category.php – броят продукти за основните категории и подкатегориите
catalog/controller/common/header.php – броят продукти в главното меню (в хедъра на сайта)
catalog/controller/module/category.php – броят продукти в менюто вляво

• /catalog/controller/product/category.php

В първия файл намерете следните редове и ги променете от:

$product_total = $this->model_catalog_product->getTotalProducts($data);

$this->data['categories'][] = array(
'name'  => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
);

на:

//$product_total = $this->model_catalog_product->getTotalProducts($data);
$product_total = 0;
$this->data['categories'][] = array(
//'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
'name' => $result['name'],
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
);

• /catalog/controller/common/header.php

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

Намерете следните редове в този файл и ги променете от:

$product_total = $this->model_catalog_product->getTotalProducts($data);

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

на:

//$product_total = $this->model_catalog_product->getTotalProducts($data);

$children_data[] = array(
  'name'  => $child['name'],
  'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']) 
);

• /catalog/controller/module/category.php

Спиране на изчислението и за категориите, в менюто вляво на сайта.

Променете следните редове от:

$product_total = $this->model_catalog_product->getTotalProducts($data);

$total += $product_total;

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

на:

//$product_total = $this->model_catalog_product->getTotalProducts($data);
//$total += $product_total;
$total = 0;
$product_total = 0;

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

В същия файл се премахва броя и за основните категории.

Променете следните редове от:

$this->data['categories'][] = array(
'category_id' => $category['category_id'],
'name'        => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $total . ')' : ''),
'children'    => $children_data,
'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
);

на:

$this->data['categories'][] = array(
'category_id' => $category['category_id'],
//'name' => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $total . ')' : ''),
'name' => $category['name'],
'children' => $children_data,
'href' => $this->url->link('product/category', 'path=' . $category['category_id'])
);

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

В случай че при вас тази оптимизация не се отрази на времето за зареждане на сайта, има още много ефективни начини за ускоряване. Добър пример е Memcached. Кеширането на динамичната информация с Memcached увеличава бързодействието на сайта. Това е другата оптимизация с реален резултат, при която зареждането на онлайн магазина наистина се ускорява.

Направените промени по системните файлове не би трябвало да доведат до затруднения в работата на дадения сайт. Въпреки това препоръчваме предварително да се направи бекъп.

Съвет от support-а: Тъй като разнообразието от инсталации и настройки на OpenCart е голямо, описаната оптимизация може да не се отрази на всеки онлайн магазин. Ако няма видим положителен резултат от тази оптимизация, причината за забавено зареждане може да се крие другаде (например в нещо допълнително инсталирано в онлайн магазина – сложна тема, допълнителна функционалност към темата, плъгин или друго).
Препоръчително е в такъв случай да се извърши допълнителна проверка. Направете тест като активирате друга тема на сайта, деактивирайте един по един плъгините, за да установите какво причинява забавянето.

Мадлена Методиева
Мадлена Методиева
Меган е част от СуперМаркетинг екипа. Мисията ѝ е старателно да попълва е-библиотеката на СуперХостинг.БГ с полезни и помощни статии.
0 0 votes
.
Абониране
Уведоми ме при
guest

9 Коментара
Inline Feedbacks
View all comments

Black Friday: Маркетинговата стратегия и нейните тънкости [Аудио]

0
Маркетинговата стратегия е инструмент, с който стратегически планирате бюджета, чрез какви канали и с какви послания ще достигнете до таргет потребителите Ви. 
Каква е разликата между домейн и уебсайт?

Каква е разликата между домейн и уебсайт? [Аудио]

2
Въпросът „Каква е разликата между домейн и уебсайт?” със сигурност влиза в топ 10 най-често срещани въпроси, когато решите да имате собствен сайт.
11 мита за онлайн присъствието

11 мита за онлайн присъствието [Аудио]

2
Темата е: онлайн присъствие - от изграждането на сайт до неговото развитие и следователно развитието на Вашия бизнес. Разберете кой е първият мит за разбиване!