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

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

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

Днес ще прибавим още една основна техника за оптимизация и ускоряване на OpenCart.

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

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

Източник на SQL заявки е опцията за приятелски адреси в OpenCart. Всеки адрес и съответстващия му приятелски адрес, се записват в базата данни. Когато се зарежда страница от онлайн магазина за всеки един адрес на категория, продукт и всичко друго, към базата данни се изпращат по няколко SQL заявки. Виждали сме случаи при онлайн магазини, в които при зареждането само на началната страница с около 30 продукта, се извършват 874 SQL заявки, от които 510 само за приятелските адреси, 185 от темата и останалите 179 за продукти, картинки, опции, настройки и всичко останало.

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

Най-разпространеният пример за това какво е индекс в базата данни:

В телефонния указател записите (редовете) са подредени по име и фамилия в азбучен ред. За да потърсите в него Иван, можете да отворите страницата, в която са подредени всички имена, започващи с буквата И. Това подреждане представлява нещо като главен индекс или главна подредба на записите в указателя. Така ще спестите много време и усилия и няма да ви се наложи да прегледате всяка една страница. Ако обаче потърсите по град, всички редове с дадения град са разпръснати. Тогава ще се наложи да прегледате всяка една страница, за да извадите всеки човек от този град.

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

Индексите помагат за по-бързото намиране на конкретна информация в таблиците на базата данни. Когато информацията се търси по определена колона в таблицата, на тази колона може да се създаде индекс.

Оптимизацията, описана в тази част, представлява поставяне на индекси в определени таблици на базата данни. Ако ползвате хостинг акаунт с контролен панел cPanel, единствено ще трябва да достъпите инструмента за работа с базите данни – phpMyAdmin.

Направете бекъп на базата данни

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

  • Ръчно генериране на бекъп и възстановяване

Бекъп на базата данни може да се извърши ръчно през cPanel -> Backups -> Генериране на пълен бекъп (full backup). Възстановяване на базата данни от този бекъп също се извършва ръчно.

Ако базата данни е с по-малък размер, можете бързо да създадете бекъп копие през phpMyAdmin. Mаркирате базата данни, кликвате на Операции и в секция Копиране на БД в: попълвате името на нова база данни (например cpaneluser_newdb).

  • Автоматично генериране на бекъп и възстановяване

Бекъп на базата данни се извършва автоматично и ще присъства в системно генерирания бекъп за хостинг акаунта. За възстановяване на базата данни от този системен бекъп препоръчваме да се използва Backup Manager by SuperHosting в cPanel. В мениджъра можете да видите датата и часа на последно генерирания системен бекъп. Ако след датата на генерирания бекъп не са извършвани други промени, освен тези за оптимизацията, тогава можете бързо и лесно да върнете предишното състояние на базата данни, без загуба на информация.

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

Важно: Поставянето на индекси по определени таблици може да допринесе за ускоряване на зареждането на потребителската част на онлайн магазина, но може да се отрази в забавяне на зареждането в административния панел. Забавяне ще се усети, когато се създава нова категория или се добави нов продукт, тъй като съществуващият индекс в съответната таблица ще се пресъздаде (обнови).

С прилагането на промените таблица по таблица можете да извършвате измерване на скоростта и проверка на коректното зареждане на онлайн магазина.

Описаните редове с код представляват 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` );

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

Съвет от support-а: Към цялостната оптимизация се включват и други промени, които можете да направите, като активиране на mod_deflate и Memcached, ползване на mod_expires и други. Към техниките за оптимизация се включва и ползването на SSD дискове за MySQL базата данни.

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

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

2 Коментара
Inline Feedbacks
View all comments
Пренеси бизнеса си онлайн за няколко часа със собствен сайт

Пренеси бизнеса си онлайн за няколко часа със собствен сайт

0
Дойде моментът на практическите съвети как да пренесете бизнеса си от офлайн към онлайн със собствен сайт. Вижте повече!
Уникално име на фирма

Как да изберете уникално име на фирма?

0
Да измислите уникално име на фирма е предизвикателна задача. Даваме Ви ценни препоръки и идеи за перфектното име за Вашия бизнес. Разгледайте ги в СуперБлога.
11 мита за онлайн присъствието

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

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