Akkyla

Большая нагрузка. Помогите советом.

Рекомендуемые сообщения

Akkyla    1

       Делаю для себя магазин. До окончания еще далеко)). Хостер Таймвеб. Прислал предупреждение - очень высокая нагрузка,превышает в 10 раз дозволенную. Не могу понять, как такой небольшой магазин,да еще и без посетителей дает такую большую нагрузку. 

     .Было три магазинчика с разной тематикой,решила объединить в один. Вот тут и началось)) В магазине 8 категорий и около 3000 товара. Шаблон не самый тяжелый. Специально перешла с Журнала на Полианну. Хостер категорически настаивает на переходе на VDS. Купила, но справится не могу. Понимаю,что на сервере нужно внести изменения в конфиг,прописать новые пути. Но этих путей я не знаю. А файл info.php  не работает

       Понимаю,что нужно оптимизировать. Индексы вроде бы прописала. Не помогает. Что вы посоветуете в данной ситуации? Как оптимизировать?

        Таймвеб не оказывает поддержки на VDS - переходить к хостинг-провайдеру с администрированием? Хотя я и не понимаю,зачем в моем случае VDS.

       Пациент- xochuuu.ru

        

         

         

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Maryl    5

как такой небольшой магазин,да еще и без посетителей дает такую большую нагрузку.

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

Был не так давно случай в работе, когда на одном сайте нагрузку создавали именно левые боты, упорно ходя по фильтру товаров. Делалось это со скоростью нескольких запросов в секунду. Таким образом сайт тоже с таймвеба получал предупреждения неоднократно. Ботов лишних повыгоняли, прикрыли фильтр для не особо важных, в результате нагрузка упала до показателей в единицы. Никакого переезда не понадобилось.

 

Пример до/после оптимизации

r4z7.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
deim    241

Напишите в лс, скорее всего могу помочь с нагрузкой, касающейся не ботов

в среднем нагрузка на бд снижается в 3-4 раза

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Akkyla    1

Сделала что смогла. Перешла с опенкарта на окстори. Из за того что в нем встроенный сео. Подключила мемкаше. Отключила большинство модулей. Заменила слайдер баннерами. Товару спарсила только половину от нужного количества, т.е сейчас товара около 1000, против 3000 ,что было. Нагрузка резко упала до нормы. НО,она опять приближается к пограничной. Ну это же ненормально,что в магазине не будет нужных модулей и товара полторы штуки(((.

Дата Сервер Нагрузка на CPU процессами Нагрузка на MySQL 20 декабря certus 17.31 cp 861 19 декабря certus 12.94 cp 826 18 декабря certus 20.35 cp 319 17 декабря certus 9.65 cp 268 16 декабря certus 8.58 cp 193 15 декабря certus 31.94 cp 194 14 декабря certus 13.59 cp 2161 13 декабря certus 3.13 cp 1614 12 декабря certus 28.03 cp 3847 11 декабря certus 27.54 cp 2950 10 декабря certus 10.12 cp 1026 9 декабря certus 26.51 cp 10856 8 декабря certus 7.87 cp 720 7 декабря certus 26.61 cp 888 6 декабря certus 34.95 cp 1045 5 декабря certus 14.49 cp 216 4 декабря certus 8.43 cp 276 3 декабря certus 8.18 cp 234 2 декабря certus 10.81 cp 199 1 декабря certus 8.49 cp 187 30 ноября certus 8.92 cp 167 29 ноября certus 21.39 cp 196 28 ноября certus 7.4 cp 250 27 ноября certus 13.47 cp 580 26 ноября certus 13.93 cp 411 25 ноября certus 30.05 cp 243 24 ноября certus 14.88 cp 343 23 ноября certus 32.04 cp 361 22 ноября certus 4 cp 27
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
puno    35

 

Сделала что смогла. Перешла с опенкарта на окстори. Из за того что в нем встроенный сео. Подключила мемкаше. Отключила большинство модулей. Заменила слайдер баннерами. Товару спарсила только половину от нужного количества, т.е сейчас товара около 1000, против 3000 ,что было. Нагрузка резко упала до нормы. НО,она опять приближается к пограничной. Ну это же ненормально,что в магазине не будет нужных модулей и товара полторы штуки(((.

Дата Сервер Нагрузка на CPU процессами Нагрузка на MySQL 20 декабря certus 17.31 cp 861 19 декабря certus 12.94 cp 826 18 декабря certus 20.35 cp 319 17 декабря certus 9.65 cp 268 16 декабря certus 8.58 cp 193 15 декабря certus 31.94 cp 194 14 декабря certus 13.59 cp 2161 13 декабря certus 3.13 cp 1614 12 декабря certus 28.03 cp 3847 11 декабря certus 27.54 cp 2950 10 декабря certus 10.12 cp 1026 9 декабря certus 26.51 cp 10856 8 декабря certus 7.87 cp 720 7 декабря certus 26.61 cp 888 6 декабря certus 34.95 cp 1045 5 декабря certus 14.49 cp 216 4 декабря certus 8.43 cp 276 3 декабря certus 8.18 cp 234 2 декабря certus 10.81 cp 199 1 декабря certus 8.49 cp 187 30 ноября certus 8.92 cp 167 29 ноября certus 21.39 cp 196 28 ноября certus 7.4 cp 250 27 ноября certus 13.47 cp 580 26 ноября certus 13.93 cp 411 25 ноября certus 30.05 cp 243 24 ноября certus 14.88 cp 343 23 ноября certus 32.04 cp 361 22 ноября certus 4 cp 27

 

 

 

 

Какой у Вас тарифный план? (CPU, MySQL).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Akkyla    1

CPU - 50, MySQL - 1000. Это для всех тарифов,кроме премиум,предназначенных для Бетрикс

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
puno    35

Этого тарифа вам не хватит, нужно переходить на другой более мощный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Akkyla    1
Исходя из данных по нагрузке, переход на другой тарифный план виртуального хостинга невозможен. В данном случае вам подойдут технические решения без ограничений по нагрузке - VDS или выделенный сервер.

 

Это ответ хостинга по поводу смены тарифа. А VDS,- это нужен системный администратор. А зачем мне он,если магазин еще делается.нет посетителей. И когда он заработает еще не известно,а платить нужно сейчас,в 9 раз больше, не считая оплаты системному администратору(((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
puno    35

Это ответ хостинга по поводу смены тарифа. А VDS,- это нужен системный администратор. А зачем мне он,если магазин еще делается.нет посетителей. И когда он заработает еще не известно,а платить нужно сейчас,в 9 раз больше, не считая оплаты системному администратору(((

 

Меняйте Таймвеб, если у них нет оптимального плана для вас!!!

Мне не понятно кто для кого работает? почитайте о них  в сети и все пойме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
deim    241

Ёлки-палки.

Здесь не в тарифном плане дело.

Я уже несколько сайтов с таймвеба в чувства приводил. В опенкарте есть реально тяжёлые запросы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
puno    35

Ёлки-палки.

Здесь не в тарифном плане дело.

Я уже несколько сайтов с таймвеба в чувства приводил. В опенкарте есть реально тяжёлые запросы.

 

То есть в этот тарифный план CPU - 50, MySQL - 1000. Вы приведете в чувство сайт под нужды Akkyla всего лишь облегчив тяжелые запросы и все будет работать?  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
deim    241

Именно.

Это обычное дело, что чистый окстор вываливается за 1000. После правок начинает кушать от 100 до 250.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
puno    35

К счастью мне повезло у меня нормальный провайдер мне это без необходимости, определение медленных запросов это штатный инструмент хостера. Поэтому я рад что мне не приходится слушать всякие истории о чудесном превращении. У всех есть свое мнение deim и если оно почему то не схоже с вашим это не значит что оно не верное.      

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
freelancer    1 411

тормозит в основном подсчет товаров в категориях в файлах header, category и модуле category

несколько раз тормозили сторонние модули, решалось их отключением

 

поставьте https://opencartforum.com/files/file/786-db-log/

походите по медленным страницам и вышлите лог

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
deim    241

<irony>puno, как думаете, freelancer тоже о каких-то чудесах рассказывает или же проблема всё-таки реальная и нам известна?</irony>

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
puno    35

<irony>puno, как думаете, freelancer тоже о каких-то чудесах рассказывает или же проблема всё-таки реальная и нам известна?</irony>

 

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

 

Я тоже буду надеяться что автор темы примет правильное решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Luchik    1

2013-12-29 15:06:37 - 17.66302 |   705 | /search/?search=canon
2013-12-29 15:06:40 - 1.44643 UPDATE oc_product SET product_id = 584202485, `quantity` = 1000, `status` = '' where `product_id` = 584202485
2013-12-29 15:06:40 - 1.91792 SELECT SQL_CALC_FOUND_ROWS p.product_id, (SELECT AVG(rating) AS total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-12-29 15:06:00') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '2013-12-29 15:06:00')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '2013-12-29 15:06:00') AND (ps.date_end = '0000-00-00' OR ps.date_end > '2013-12-29 15:06:00')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= '2013-12-29 15:06:00' AND p2s.store_id = '0' GROUP BY p.product_id ORDER BY p.sort_order ASC, LCASE(pd.name) ASC LIMIT 0,500
2013-12-29 15:06:52 - 1.96471 SELECT COUNT(DISTINCT p.product_id) AS total FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= '2013-12-29 15:06:00' AND p2s.store_id = '0' AND ( pd.name LIKE '%canon%' OR pd.tag LIKE '%canon%' OR LCASE(p.model) = 'canon' OR LCASE(p.sku) = 'canon' OR LCASE(p.upc) = 'canon' OR LCASE(p.ean) = 'canon' OR LCASE(p.jan) = 'canon' OR LCASE(p.isbn) = 'canon' OR LCASE(p.mpn) = 'canon')
2013-12-29 15:06:54 - 1.89816 SELECT SQL_CALC_FOUND_ROWS p.product_id, (SELECT AVG(rating) AS total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < '2013-12-29 15:06:00') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '2013-12-29 15:06:00')) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < '2013-12-29 15:06:00') AND (ps.date_end = '0000-00-00' OR ps.date_end > '2013-12-29 15:06:00')) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= '2013-12-29 15:06:00' AND p2s.store_id = '0' AND ( pd.name LIKE '%canon%' OR pd.tag LIKE '%canon%' OR LCASE(p.model) = 'canon' OR LCASE(p.sku) = 'canon' OR LCASE(p.upc) = 'canon' OR LCASE(p.ean) = 'canon' OR LCASE(p.jan) = 'canon' OR LCASE(p.isbn) = 'canon' OR LCASE(p.mpn) = 'canon') GROUP BY p.product_id ORDER BY p.sort_order ASC, LCASE(pd.name) ASC LIMIT 0,15
2013-12-29 15:06:54 - 1.72662 UPDATE oc_product SET product_id = 584201149, `quantity` = 1000, `status` = '' where `product_id` = 584201149
2013-12-29 15:06:55 - ----------
2013-12-29 15:06:55 - 1.91807 |     2 | /var/www/catalog/model/catalog/simonfilters.php(179)
2013-12-29 15:06:55 - 1.96471 |     1 | /var/www/vqmod/vqcache/vq2-catalog_controller_product_search.php(230)
2013-12-29 15:06:55 - 10.56870 |   515 | /var/www/vqmod/vqcache/vq2-catalog_model_catalog_product.php(305)
2013-12-29 15:06:55 - ----------
2013-12-29 15:06:55 - 16.39312 |   703 | /search/?search=canon
2013-12-29 15:06:55 - 0.03900 |   155 | /search/
2013-12-29 15:06:55 - 0.35640 |   176 | /

 

Подскажите, куда копнуть?

По файлам:

/var/www/vqmod/vqcache/vq2-catalog_model_catalog_product.php(305)
$product_data[$result['product_id']] = $this->getProduct($result['product_id']);

-------------------------------
/var/www/vqmod/vqcache/vq2-catalog_controller_product_category.php(229)
$results = $this->model_catalog_product->getProducts($data);

--------------------------

/var/www/catalog/model/catalog/simonfilters.php(179)
$rows = $this->model_catalog_product->getProducts($data);
Фильтр товаров. Отключить не могу, т.к. он нужен )

 

Очень нужен намек.

Конфиг севера: VPS 4 ядра по 2Гц, 3Гб оперативной памяти (под mysql выделено до 1.5Гб, макс что я видел - около 800, под memcached выделено до 512Мб)

ii  memcached                                1.4.5-1                          A high-performance memory object caching system
ii  nginx                                    0.7.67-3+squeeze3                small, but very powerful and efficient web server and mail proxy
ii  percona-server-server-5.5                5.5.35-rel33.0-611.squeeze       Percona Server database server binaries
ii  php5-cli                                 5.3.3-7+squeeze18                command-line interpreter for the php5 scripting language
ii  php5-memcache                            3.0.4-4+squeeze1                 memcache extension module for PHP5

 

Можно ли для поиска лимитировать количество найденных товаров, например 75 (5 страниц по 15 товаров)? Быстрее бы поиск происходил, я думаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
deim    241

Лучик, копать в catalog/controller/product/category.php

или в лс

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
deim    241

Я тут внимание обратил... Не знаю даже что и сказать.

Как вам это удалось?

 

2013-12-29 15:06:54 - 1.72662 UPDATE oc_product SET product_id = 584201149, `quantity` = 1000, `status` = '' where `product_id` = 584201149

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Luchik    1

Я сам не понял что это..может кто-то параллельно по сайту лазил (он сейчас запущен и работает). Я в это время тестировал поиск по сайту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
freelancer    1 411

тогда вопрос есть ли в таблице ключ по product_id?

такая ситуация могла возникнуть когда mysql был сильно занят чем-то другим

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Luchik    1

тогда вопрос есть ли в таблице ключ по product_id?

такая ситуация могла возникнуть когда mysql был сильно занят чем-то другим

Я не специалист. Объясните где и как смотреть.

Вообще брался стандартный Ocstore 1.5.5.1.1 + куплен шаблон темплфорест + куплен MCJ - Автоматическое объединение и сжатие CSS, JS + куплен фильтр Simple + куплен парсер в фоне работает..

Парсер иногда проскакивает

2013-12-29 17:09:34 - 1.45723 | 449 | var/www/парсер .php (пример)

2013-12-29 17:09:34 - 4.51370 | 441 | var/www/парсер.php(пример)

2013-12-29 17:09:34 - 23.55369 | 2497 | var/www/парсер.php(пример)

2013-12-29 17:09:34 - ----------

2013-12-29 17:09:34 - 29.56378 | 3605 | var/www/парсер.php(пример)

но аналогичная надпись проскочила через несколько минут, после запроса Canon в поиске.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Luchik    1

Поставил другую программу для логов
13.93969 s 9.51 mb logs (2) sql (705) files (94) request (94)
по запросу "canon"

жесть.

Кстати, в мускуле сделал запрос на добавление индексов

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` ) ;
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_order` ADD INDEX ( `customer_id` ) ;
ALTER TABLE `oc_product` ADD UNIQUE INDEX ( `product_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` ADD INDEX ( `date_available` ) ;
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_url_alias` ADD INDEX ( `query` ) ;
ALTER TABLE `oc_url_alias` ADD INDEX ( `keyword` ) ;
ALTER TABLE `oc_user` ADD INDEX ( `username` ) ;
ALTER TABLE `oc_user` ADD INDEX ( `password` ) ;
ALTER TABLE `oc_user` ADD INDEX ( `email` ) ;

Скорость загрузки главной и товара не изменилась, а загрузка категории с товарами стала в 3 раза быстрее примерно (6,6 сек против 1,3-2,7 сек).

И у меня отдельный модуль меню. Я в админке в категориях отключил "Показывать в главном меню " (была включена одна категория). Убрался один запрос sql на всех страницах.

Надо что-то с поиском делать..попробую файлы поиска заменить с других сборок.
И что-бы еще больше ускорить, надо уменьшить колличество запросов.
У меня включено ЧПУ SeoPro, как и у всех. Если его отключить, то в крошках и ссылках меняюся данные, но скорости не прибавляется. Хотя колличество запросов уменьшается.
Нашел, что можно кэшировать SeoPro, но мне что-то он не добавил скорости загрузки или уменьшения колличества sql запросов. Делал по этому:

В файле seo_url.php часть содержимого функции index() после строки
Код:
$parts = explode('/', $this->request->get['_route_']);
и до
Код:
if (isset($this->request->get['product_id'])) {
$this->request->get['route'] = 'product/product';
необходимо заменить на следующий код:
Код:
if (count($parts)) {
$parts = array_map(array($this->db, 'escape'), $parts);
$db_query = $this->db->query("
SELECT SUBSTRING_INDEX(query,'=',1) AS name,
CONVERT(SUBSTRING_INDEX(query,'=',-1),UNSIGNED INTEGER) AS value
FROM " . DB_PREFIX . "url_alias WHERE keyword IN('" . implode("','", $parts) . "') ORDER BY
FIND_IN_SET(keyword, '" . implode(",", $parts) . "')
");
if ($db_query->num_rows) {
foreach($db_query->rows as $row) {
if($row['name'] == 'category_id') {
if (!isset($this->request->get['path'])) {
$this->request->get['path'] = $row['value'];
} else {
$this->request->get['path'] .= '_' . $row['value'];
}
} else $this->request->get[$row['name']] = $row['value'];
}
} else $this->request->get['route'] = 'error/not_found';
}
В том же файле, но уже для функции rewrite() после строки
Код:
parse_str($url_data['query'], $data);
и до
Код:
if ($url) {
unset($data['route']);
содержимое необходимо заменить на код ниже:
Код:
$queries = array();
foreach ($data as $key => $value) {
if (isset($data['route'])) {
if (($data['route'] == 'product/product' && $key == 'product_id') ||
(($data['route'] == 'product/manufacturer/info' ||
$data['route'] == 'product/product') && $key == 'manufacturer_id') ||
($data['route'] == 'information/information' && $key == 'information_id')) {

$queries[] = $this->db->escape($key . '=' . (int)$value);
} elseif ($key == 'path') {
$categories = explode('_', $value);
foreach ($categories as $category) {
$queries[] = "category_id=" . (int)$category;
}
}
}
}
if (count($queries)) {
$cache = md5(http_build_query($queries));
$rows = $this->cache->get('url.alias.' . (int)$this->config->get('config_store_id') . $cache);
if (!$rows) {
$db_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias
WHERE `query` IN('" . implode("', '", $queries) . "')");
$rows = $db_query->rows;
$this->cache->set('url.alias.' . (int)$this->config->get('config_store_id') . $cache, $rows );
}
foreach ($queries as $query) {
foreach ($rows as $row) {
if($row['query'] == $query) {
$url .= '/' . $row['keyword'];
$query = explode('=', $query);
$key = array_shift($query);
$key = ($key=='category_id') ? 'path' : $key;
unset($data[$key]);
break;
}
}
}
}
Обратите внимание, что в эту функцию добавлено также кэширование запросов к базе данных, это уже комплексное решение, которое сводит влияние режима SEO URL на производительность сервера к существенному минимуму (вместо 30-100 запросов всего 5-10).При использовании кеширования не забудьте его сбрасывать после изменения/создания категории, продукта, статьи или производителя. Для этого в модели этих объектов наравне с удалением собственного кэша добавьте строчку кода

Может я не правильно сделал. И посоветуете по-другому?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
freelancer    1 411

по спойлер спрячьте. надеюсь кроме вас это никто не будет использовать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу