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

[Поддержка] CART CACHE - кэшируем корзину (cart.php => getProducts)


kJlukOo

Recommended Posts

CART CACHE - кэшируем корзину (cart.php => getProducts)


CART CACHE - кэшируем корзину (cart.php => getProducts)


в опенкарте есть метод getProducts библиотеки cart.php

этот метод вовзращает содержимое корзины для текущего пользователя

на боевом магазине обычно этот метод вызывается 50+ раз

соответственно происходит избыточная нагрузка на бд и на сайт в целом

этот модуль кэширует возвращаемые данные до изменения корзины. те вместо 50+ раз метод отработает 1 раз,

закэширует данные и одаст следующим 49+ :D

кэш хранится на стороне сервера.

по умолчанию в файлах на жестком диске, если у вас активирован метод кеширования мемчач, то в оперативной памяти


  • Добавил
  • Добавлено
    25.08.2018
  • Категория
  • Ioncube Loader
    Нет
  • ocStore
    3.0
    2.3
    2.2
    2.1
  • OpenCart.Pro, ocShop
    Opencart.pro 2.3
    Opencart.pro 2.1
    OcShop 2.0.3.х
  • Обращение к серверу разработчика
    Нет

 

  • +1 2
Надіслати
Поділитися на інших сайтах

45 минут назад, vtkach сказал:

Спасибо за мод!

Для версии 2.1 путь будет: system/library/cart.php

пожалуйста. так это учетно

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

8 минут назад, dexion сказал:

@kJlukOo а для 1.5 это тоже актуально?

это мелкая фича. можно и не заморачиваться

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

Версия, которая cart_cache.ocmod.zip не устанавливается с сообщением: Directory containing files to be uploaded could not be found!

 

До этого, пока был просто .xml было нормально.

 

Если разархивировать и переименовать в xxx.ocmod.xml, то всё нормально.

Змінено користувачем Yakaya
Надіслати
Поділитися на інших сайтах


блин, пустую папку аплод надо добавить. это все для срвместимости с 3х

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

в чем смыл вопроса? зачем хранить? или зачем хранить конкретно в сессии? для каждого юзера своя корзина и своя сессия очевидно же

если разбираетесь в пыхе и опенкарте гляньте модификацию. все станет ясно. пишу без запятых с мобилы

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

5 minutes ago, kJlukOo said:

в чем смыл вопроса? зачем хранить? или зачем хранить конкретно в сессии? для каждого юзера своя корзина и своя сессия очевидно же

 

Зачем именно в сессии? У Вас в самой первой версии массив товаров просто сохранялся в переменной. Некоторые модули кешированния используют переменные сессии для создания названия файлов кеша. И получается чтоб теперь они норм работали нужно добавить переменную сессии products_cache в исключение, правильно?

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


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

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

1 минуту назад, vtkach сказал:

 

Зачем именно в сессии? У Вас в самой первой версии массив товаров просто сохранялся в переменной. Некоторые модули кешированния используют переменные сессии для создания названия файлов кеша. И получается чтоб теперь они норм работали нужно добавить переменную сессии products_cache в исключение, правильно?

Если ты используешь более продвинутые модули кеширования то нафиг те этот бесплатный модуль?

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


2 минуты назад, AWARO сказал:

Если ты используешь более продвинутые модули кеширования то нафиг те этот бесплатный модуль?

хз, я подобной фигни не видел еще. может где-то у марка есть подобное в кешере

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

7 минут назад, vtkach сказал:

Это нужная вещь. осообенно если много используешь модулией из "учитывать в заказе", уменшает к-во запросов к БД.

именно.

у коллеги на боевом сайте getProducts вызывался около 65. я вот решил подобную модификацию сделать.

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

7 минут назад, nikifalex сказал:

в 1.5 был кэш на this->data это лучше чем сессия зря вы сюда сессию притянули

а почему зря? а как там было ща гляну

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

Он сделал хранение в переменной сессии для "уникализации" корзины покупателя, так как сессия для каждого своя.

И тогда в методе getProducts не выполняются запросы к БД вообще, если ходить по страницах, а массив товров берется из $this->session->data['products_cache'].

И эта переменная меняется только при выполнении методов add, update, clear, remove для корзины.

 

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

Змінено користувачем vtkach
Надіслати
Поділитися на інших сайтах


да, я такой

по моему это лучше чем в 1.5

там хранение в пределах запроса, а у меня дольше

@vtkach спасибо за обьяснения. а то я тут под солнышком лежу

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

А если использовать стандартный кеш и добавлять id сессии для уникализации пользователя:

$cache = 'cart.products' . '.' .  '.' . $this->language->get('code') . '.' . $this->config->get('config_store_id') . '.' . $this->session->getId();
$cache_data = $this->cache->get($cache);
if (!empty($cache_data)) {
	$product_data = $cache_data;
} else {
.........

	$this->cache->set($cache) = $product_data;
}

Так по идее тоже должно работать.

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


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

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

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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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