Когда-то (в ноябре 2010) я писал про особенность таблицы b_sale_fuser и ее разбухание на активных проектах
Скоро уже 4 года с момента выхода поста.
А что же нового?
В этот раз я проанонсирую один из вариантов диагностики и чистки, а также вкратце покажу пример устранения одной из первопричин такого поведения. Ведь устранение причины - гораздо лучше борьбы с последствиями
[spoiler]
Итак.
Инструменты диагностики и чистки
Я снова встретил на нескольких своих проектах признаки разбухания b_sale_fuser
На модерации находится модуль
Я решил внести в него также функционал по диагностике и тестированию эффекта, когда чистка корзин не справляется с реальной скоростью их формирования
Детали смотреть в посте
Что теперь можно будет сделать с помощью модуля.
1. в один клик определить все ли ок на проекте с таблицей b_sale_fuser

2. Произвести чистку, если это необходимо

P.S. Ссылку на модуль я прикреплю позже, как только он пройдет модерацию
И обещанный пример того, как можно устранить саму причину
Внимание, источников разбухания может быть много и они уникальны на проектах, но есть и классика.
Понять причину очень легко, если вы ознакомитесь с комментариями в документации к методу
Именно он и есть - основной источник роста количества корзин, а следовательно и записей таблицы b_sale_fuser
Однако, разработчики заложили в него небольшую хитрость, см комментарии в документации, которую мы и используем для борьбы с эффектом разбухания.
Итак
самым плодовитыми в плане создания корзин (записей таблицы b_sale_fuser) по статистике является....
компонент малая корзина bitrix.basket.basket.small. Та самая вездесущая малая корзина
Именно этот компонент под атаками ботов и прочей нежити (кстати, прутая посещаемость тоже может способствовать) и может не выдержать оборону.
Строки
говорят по сути о том, что надо или нет, но всегда для пользователя будет существовать уже готовая корзина. Даже если она на проекте не понадобится, ее нам создадут.
Ну а боты... получат далеко не одну корзинку на душу населения.
Что мы сделаем
используем спецпараметр, который запретит создание корзины, если ее не найдено
и слегка модернизируем код, чтобы обеспечить его стабильность при использовании спецпараметра.
Вот и все
Больше малая корзина не позволит себе плодить записи b_sale_fuser. А вам не придется лишний раз пользоваться
P.S. если вы нашли на своем проекте опухшую b_sale_fuser, по негласной традиции вы можете оставить комментарий в качестве "пузомерки"
Скоро уже 4 года с момента выхода поста.
А что же нового?
В этот раз я проанонсирую один из вариантов диагностики и чистки, а также вкратце покажу пример устранения одной из первопричин такого поведения. Ведь устранение причины - гораздо лучше борьбы с последствиями
[spoiler]
Итак.
Инструменты диагностики и чистки
Я снова встретил на нескольких своих проектах признаки разбухания b_sale_fuser
На модерации находится модуль
Я решил внести в него также функционал по диагностике и тестированию эффекта, когда чистка корзин не справляется с реальной скоростью их формирования
Детали смотреть в посте
Что теперь можно будет сделать с помощью модуля.
1. в один клик определить все ли ок на проекте с таблицей b_sale_fuser

2. Произвести чистку, если это необходимо

P.S. Ссылку на модуль я прикреплю позже, как только он пройдет модерацию
И обещанный пример того, как можно устранить саму причину
Внимание, источников разбухания может быть много и они уникальны на проектах, но есть и классика.
Понять причину очень легко, если вы ознакомитесь с комментариями в документации к методу
Именно он и есть - основной источник роста количества корзин, а следовательно и записей таблицы b_sale_fuser
Однако, разработчики заложили в него небольшую хитрость, см комментарии в документации, которую мы и используем для борьбы с эффектом разбухания.
Итак
самым плодовитыми в плане создания корзин (записей таблицы b_sale_fuser) по статистике является....
компонент малая корзина bitrix.basket.basket.small. Та самая вездесущая малая корзина
Именно этот компонент под атаками ботов и прочей нежити (кстати, прутая посещаемость тоже может способствовать) и может не выдержать оборону.
Строки
$rsBaskets = CSaleBasket::GetList(
array("ID" => "ASC"),
array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"),
false,
false,
array(
"ID", "NAME", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY",
"PRICE", "WEIGHT", "DETAIL_PAGE_URL", "NOTES", "CURRENCY", "VAT_RATE", "CATALOG_XML_ID",
"PRODUCT_XML_ID", "SUBSCRIBE", "DISCOUNT_PRICE", "PRODUCT_PROVIDER_CLASS", "TYPE", "SET_PARENT_ID"
)
);
while ($arItem = $rsBaskets->GetNext())
{
$arBasketItems[] = $arItem;
if (CSaleBasketHelper::isSetItem($arItem))
$arSetParentWeight[$arItem["SET_PARENT_ID"]] += $arItem["WEIGHT"] * $arItem['QUANTITY'];
}
|
говорят по сути о том, что надо или нет, но всегда для пользователя будет существовать уже готовая корзина. Даже если она на проекте не понадобится, ее нам создадут.
Ну а боты... получат далеко не одну корзинку на душу населения.
Что мы сделаем
используем спецпараметр, который запретит создание корзины, если ее не найдено
и слегка модернизируем код, чтобы обеспечить его стабильность при использовании спецпараметра.
$newBasketUserID = CSaleBasket::GetBasketUserID(true);
if($newBasketUserID>0){
$rsBaskets = CSaleBasket::GetList(
array("ID" => "ASC"),
array("FUSER_ID" => $newBasketUserID, "LID" => SITE_ID, "ORDER_ID" => "NULL"),
false,
false,
array(
"ID", "NAME", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY",
"PRICE", "WEIGHT", "DETAIL_PAGE_URL", "NOTES", "CURRENCY", "VAT_RATE", "CATALOG_XML_ID",
"PRODUCT_XML_ID", "SUBSCRIBE", "DISCOUNT_PRICE", "PRODUCT_PROVIDER_CLASS", "TYPE", "SET_PARENT_ID"
)
);
while ($arItem = $rsBaskets->GetNext())
{
$arBasketItems[] = $arItem;
if (CSaleBasketHelper::isSetItem($arItem))
$arSetParentWeight[$arItem["SET_PARENT_ID"]] += $arItem["WEIGHT"] * $arItem['QUANTITY'];
}
}
|
Вот и все
Больше малая корзина не позволит себе плодить записи b_sale_fuser. А вам не придется лишний раз пользоваться
P.S. если вы нашли на своем проекте опухшую b_sale_fuser, по негласной традиции вы можете оставить комментарий в качестве "пузомерки"
