Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Ускорение Opencart


Тормозит Opencart?  

21 голос

You do not have permission to vote in this poll, or see the poll results. Будь ласка, увійдіть або зареєструйтеся для голосування в опитуванні.

Recommended Posts

День добрый.

Тему думаю актуальная только для больших магазинов. Пока было 10 тысяч позиций, вопросов не возникала. Проблема встала при 40 тысячах.

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

В итоге

- отключены подсчёты кол-ва товаров

- прописаны индексы

- фильтр товаров установлен с кешем.

 

После этих мер время загрузки сильно сократилось, но главная страница открывается всё равно 4 секунды.

Включили слоулог, оказалось что тормозит модуль "случайные товары" при выводе всеголишь 4 позиций.

 

Проблема в выборке "Order by rand"

Кто-то модифицировал данный модуль другими вариантами запросов?

Просьба поделиться решением. Заранее спасибо.

Надіслати
Поділитися на інших сайтах


Чтобы выбрать четыре рандомных товара  - проще взять в php выделить диапазон id товаров. создать набор рандомных значений, проверив каждое на присутствие в базе - в вашей ситуации лучшее решение вы вряд ли придумаете.

Надіслати
Поділитися на інших сайтах

Ну... и я вствалю

 

сделать выборку с лимитом, например 3*нужное количество

и случайным start

 

результат (массив) - случайно перемешать

Надіслати
Поділитися на інших сайтах

https://opencartforum.com/topic/4726-modul-sluchainye-tovary-oc15-ocstore-101/?do=findComment&comment=30871

Есть у меня тестовая база: 1000 категорий, 10000 товаров... магазин один, язык один... обзоров, оценок, специальных цен и цен со скидкой на количестве - нет

Решил практически посмотреть что будет на большой базе...

Вот упрощённый запрос из модуля

attachicon.gifRAND1.PNG

А вот слегка изменённый запрос

attachicon.gifRAND2.PNG

Надіслати
Поділитися на інших сайтах

Я правильно понимаю вот код модуля:

Вот кусок модуля в php который запрос делает к базе

   $sql .= " ORDER BY Rand()";
   
   if (isset($data['order']) && ($data['order'] == 'DESC')) {
    $sql .= " DESC";
   } else {
    $sql .= " ASC";
   }
  
   if (isset($data['start']) || isset($data['limit'])) {
    if ($data['start'] < 0) {
     $data['start'] = 0;
    }    
 
    if ($data['limit'] < 1) {
     $data['limit'] = 20;
    } 
   
    $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
   }
   
   $product_data = array();
     
   $query = $this->db->query($sql);
            $this->load->model('catalog/product');
   foreach ($query->rows as $result) {
    $product_data[$result['product_id']] = $this->model_catalog_product->getProduct($result['product_id']);
   }
   
   //$this->cache->set('product.' . $cache . '.' . $customer_group_id, $product_data);
  }
  
  return $product_data;
 }
Надіслати
Поділитися на інших сайтах


  • 1 month later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.