https://help.superhosting.bg/opencart-slow-with-many-products.html
  • bg

Хостинг, Домейни, Cloud, Виртуални сървъри (VPS), Managed VPS, SSL сертификати

OpenCart 1.5 - Бавно зареждане при голям брой продукти в магазина

OpenCart
opencart оптимизация, opencart бавен, opencart забавяне, opencart ускоряване, opencart много продукти, opencart категории, opencart брой продукти

Ако във вашият OpenCart онлайн магазин има много голям брой продукти и забележите забавено зареждане, може да опитате да оптимизирате скоростта със следните две настройки.

Преди да започнете с оптимизацията направете бекъп на сайта.

1. Спиране на изчисляването и показването на броя продукти

Една от основните причини за бавно зареждане на сайтове на OpenCart е броят на категориите и продуктите. Причината за това е, че системата на много места в кода си изчислява общия им брой. Нарастването на броя води до увеличаване на забавянето при зареждане на сайта.

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

/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'])
);

 


2. Оптимизация на базата данни

Тази оптимизация засяга базата данни на онлайн магазина, като се поставят индекси в определени таблици.

Описаните редове с код представляват SQL заявки, които можете да копирате, поставите в секция SQL на phpMyAdmin и изпълните. Веднъж поставен, индексът е постоянен и не е необходимо в бъдеще да го поставяте отново. Обърнете внимание и ако е необходимо, променете префикса на таблиците (в посочените примери префиксът е oc_).

Таблиците за категориите

ALTER TABLE `oc_category` ADD INDEX ( `parent_id` ) ;
ALTER TABLE `oc_category` ADD INDEX ( `top` ) ;
ALTER TABLE `oc_category` ADD INDEX ( `sort_order` ) ;
ALTER TABLE `oc_category` ADD INDEX ( `status` ) ;
ALTER TABLE `oc_category_description` ADD INDEX ( `language_id` );
ALTER TABLE `oc_category_to_store` ADD INDEX ( `store_id` );

В случай че имате много подкатегории с подкатегории, с подкатегории и т.н., поставете индекс на колоната path_id:

ALTER TABLE `oc_category_path` ADD INDEX ( `path_id` );

Таблиците за продуктите

ALTER TABLE `oc_product` ADD INDEX ( `model` ) ;
ALTER TABLE `oc_product` ADD INDEX ( `sku` ) ;
ALTER TABLE `oc_product` ADD INDEX ( `upc` ) ;
ALTER TABLE `oc_product` ADD INDEX ( `manufacturer_id` ) ;
ALTER TABLE `oc_product` ADD INDEX ( `sort_order` ) ;
ALTER TABLE `oc_product` ADD INDEX ( `status` ) ;
ALTER TABLE `oc_product_option` ADD INDEX ( `option_id` ) ;
ALTER TABLE `oc_product_option_value` ADD INDEX ( `product_option_id` ) ;
ALTER TABLE `oc_product_option_value` ADD INDEX ( `product_id` ) ;
ALTER TABLE `oc_product_option_value` ADD INDEX ( `option_id` ) ;
ALTER TABLE `oc_product_option_value` ADD INDEX ( `option_value_id` ) ;
ALTER TABLE `oc_product_to_category` ADD INDEX ( `category_id` );
ALTER TABLE `oc_product_attribute` ADD INDEX ( `attribute_id` );
ALTER TABLE `oc_product_attribute` ADD INDEX ( `language_id` );
ALTER TABLE `oc_product_description` ADD INDEX ( `language_id` );
ALTER TABLE `oc_product_to_store` ADD INDEX ( `store_id` );

Таблиците за опциите към продуктите

В случай че имате богат избор от опции към продуктите, добавете индекси и в следните таблици:

ALTER TABLE `oc_option` ADD INDEX ( `sort_order` ) ;
ALTER TABLE `oc_option_description` ADD INDEX ( `name` ) ;
ALTER TABLE `oc_option_value` ADD INDEX ( `option_id` ) ;
ALTER TABLE `oc_option_value_description` ADD INDEX ( `option_id` ) ;

Таблицата за приятелските адреси

ALTER TABLE `oc_url_alias` ADD INDEX ( `query` ) ;
ALTER TABLE `oc_url_alias` ADD INDEX ( `keyword` ) ;
ALTER TABLE `oc_url_alias` ADD INDEX ( `url_alias_id` );

500px270px
SuperHosting.BG
    OpenCart
  • Активиране на Memcached в OpenCart 2
    В OpenCart версии 2.3.0.2, 2.2.0.0 и 2.1.0.2 може да бъде активирано кеширане чрез Memcached. За OpenCart версия 1.5.6.x вижте следната статия: Активиране на Memcached в OpenCart (версия 1.5.6.x) Бележка: Преди да активирате... »
  • OpenCart 2 - Инсталиране на тема (theme)
    Допълнителни теми за OpenCart можете да намерите в категория Themes на сайта на разработчика: Themes. Преди да си изберете тема уверете се, че тя е съвместима с версията на вашият... »
  • OpenCart - Добавяне на продукт
    За да добавите продукт в онлайн магазина (OpenCart v.1.5.x) влезте в административния панел и кликнете от главното меню (1) Каталог -> (2) Продукти и след това на бутона (3) Добави:   Информация В... »
  • OpenCart - Създаване на категория
    За да създадете категория в онлайн магазина (OpenCart v.1.5.x) влезте в административния панел и кликнете от главното меню Каталог -> Категории и след това на бутона Добави:   В таб Информация (1)... »
  • Активиране на Memcached в OpenCart (версия 1.5.6.x)
    В OpenCart v.1.5.6.x може да бъде активирано кеширане чрез Memcached. За OpenCart версии 2.3.0.2, 2.2.0.0 и 2.1.0.2 вижте следната статия: Активиране на Memcached в OpenCart 2 Преди да бъде активирано ползването на Memcached... »
Всички права запазени © 2005-2017 , www.superhosting.bg