Заметки e-commerce разработчика
Делюсь опытом в разработке высоконагруженных платформ, интеграции 1С, управлении командой и архитектуре e-commerce систем.

Индексы MySQL под каталог Битрикса: тест на 102 000 товаров
Проверил на реальном стенде (102 000 товаров, MySQL 8.0.40) рекомендации по индексам для каталога 1С-Битрикс — что из них реально работает, с цифрами и EXPLAIN.

Индексы MySQL под каталог 100k+ товаров в 1С-Битрикс
Индексы MySQL для каталога 1С-Битрикс на 100k+ товаров: фильтр по свойствам, цены и остатки, сортировка с пагинацией, HL-блоки вместо EAV — с SQL и EXPLAIN.

Кэширование в 1С-Битрикс: 5 механизмов и когда какой
Пять механизмов кэша 1С-Битрикс: кэш данных, автокэш компонентов, тегированный кэш D7, HL-блоки, композитный сайт — что кэшируется и как сбрасывается.

ErrorCollection в D7-контроллерах: коды ошибок вместо success/error
ErrorCollection и Errorable в action-методах 1С-Битрикс: код ошибки и доп. данные вместо текста — статус ответа меняется автоматически.

Разделы инфоблока в 1С-Битрикс: D7 и без ручного разбора массива
Собираем дерево разделов инфоблока через D7 (SectionTable) без ручного unset/usort — с помощью небольшой открытой библиотеки yunaweb/bitrix-section-tree.

CSRF в D7-контроллерах: почему GET-запросы тоже требуют токен
С версии главного модуля 18.0.9 D7-контроллер 1С-Битрикс требует CSRF-токен и на GET-запросах. Разбор ActionFilter\Csrf, ошибки invalid_csrf и точечной настройки фильтров через configureActions().

AJAX в 1С-Битрикс: актуальные способы вместо CPHttpRequest
Актуальные способы AJAX в 1С-Битрикс: BX.ajax.runComponentAction, контроллер модуля, свой обработчик на fetch/jQuery/Vue — вместо устаревшего CPHttpRequest.

15k+ заказов в месяц на 1С-Битрикс без падения под нагрузкой
Композитный кеш и индексы MySQL — что реально держит нагрузку на проекте 1С-Битрикс с 15k+ заказов в месяц.

Отключение событий Add/Update/Delete в 1С-Битрикс: почему raw SQL и EventManager — оба не то
Разбираю, почему прямой SQL в обход CUser::Update() ломает интеграции, и почему EventManager::registerEventHandler для этого тоже не подходит. Рабочий D7-совместимый способ — внутри.

Новый блог. Старый просто пылился
Переделал блог с нуля после нескольких лет молчания. Что изменилось и о чём буду писать дальше.