Бренды и города в свойствах инфоблока раздули каталог - фильтр тормозит, заказчик просит "вынести справочник". Highload-блок (HL) в 1С-Битрикс: Управление сайтом - отдельная плоская таблица MySQL с полями UF_* и формой в админке, а не "инфоблок, только быстрее". Ниже - когда HL уместен, создание в админке, вывод через bitrix:highloadblock.list и D7 ORM, индексы на UF_* и типовые ошибки. Проверено 30 июля 2026.
Highload-блок (HL) в 1С-Битрикс: Управление сайтом - отдельная плоская таблица MySQL со своими UF_-полями и формой в админке "Контент → Highload-блоки". Без иерархии разделов и SEO-страниц элементов; для больших справочников (бренды, города, коды), связи с каталогом через UF_XML_ID и быстрой выборки через D7 ORM compileEntity и getList. Сегодня: создайте блок, заполните справочник, выведите list/view или getList, добавьте ADD INDEX на поля фильтра.
Bitrix24 - CRM в облаке, не наш продукт. Здесь только коробочная CMS на вашем сервере. Углублённый add/update/delete - в гайде по D7 CRUD для Highload; обзор кластера - в хабе по Highload-блокам. В выдаче много сниппетов с HL=1 и мало связки "админка → компонент → индексы".
Оцените, когда Highload оправдан вместо инфоблока
Инфоблок - контент с разделами, SEO и карточкой элемента. HL - плоский справочник: бренды, города, коды складов, логи. Без иерархии и без URL элемента на сайте.
| Критерий | Инфоблок | Highload-блок |
|---|---|---|
| Объём | До нескольких тысяч | Десятки и сотни тысяч строк |
| Структура | Разделы, SEO, детальная страница | Плоский справочник |
| Кейс | Товары, новости, статические страницы | Бренды, города, таблицы соответствий |
| Связь с каталогом | Элемент = товар | В товаре UF_XML_ID или ID из HL |
Если умный фильтр на Битрикс тормозит из-за "списка" с тысячами значений - кандидат на HL.
Когда HL: справочники от 3-5 тысяч строк, логи без SEO. Когда НЕ нужен HL: контент с разделами и ЧПУ, новости с мета-тегами, товары с карточкой и галереей, любая иерархия "раздел → элемент". Для этого создайте инфоблок в админке - HL не заменит SEO и дерево разделов.
Делайте: выносите только "тяжёлые" справочники. Не делайте: не дублируйте товары в HL "ради скорости".
Создайте HL-блок в админке CMS
Путь: Контент → Highload-блоки → Добавить. Поля HL - пользовательские поля с объектом HLBLOCK_ID.
- Название сущности латиницей: BrandDirectory.
- TABLE_NAME в snake_case: b_hlbd_brands - уникально в базе.
- Языковые названия для редакторов в админке.
- Права на закладке "Права" (с 17.0.0 модуля).
- ID блока после сохранения - для BLOCK_ID и кода. Не копируйте HL=1 с Habr.
Добавьте UF_NAME, UF_XML_ID, UF_SORT, UF_ACTIVE; для логотипа - UF_FILE. В каталоге задайте тип свойства "Справочник" с привязкой к HL - штатный путь из курса CMS (COURSE_ID=41).
Делайте: фиксируйте ID и TABLE_NAME в документации. Не делайте: не меняйте TABLE_NAME на проде без миграции.
Заполните справочник и свяжите с каталогом
Записи: "Контент → Highload-блоки → [блок] → Элементы". Тысячи строк - импорт CSV или штатный экспорт/импорт модуля.
Связка: HL (UF_XML_ID) → свойство "Справочник" в товаре → фильтр по коду → без раздувания свойств IB
С 1С синхронизируйте UF_XML_ID - см. интеграцию 1С с сайтом. В товаре храните XML_ID, не текст бренда.
Делайте: проверьте уникальность UF_XML_ID перед импортом. Не делайте: не заливайте 50 000 строк без теста на стенде.
Выведите справочник компонентами list и view
В модуле highloadblock есть bitrix:highloadblock.list и bitrix:highloadblock.view. В визредакторе: "Контент → Highload инфоблоки" или ручная вставка.
List - таблица записей на странице "Все бренды". Параметры: BLOCK_ID (ID из админки), DETAIL_URL (шаблон /brands/#ID#/), ROWS_PER_PAGE, SORT_FIELD, SORT_ORDER. View - одна запис по ROW_ID из URL; укажите BLOCK_ID и шаблон DETAIL_URL в list, чтобы ссылки вели на view-страницу.
<?php
$APPLICATION->IncludeComponent(
'bitrix:highloadblock.list',
'',
[
'BLOCK_ID' => BRAND_HL_ID,
'DETAIL_URL' => '/brands/#ID#/',
'ROWS_PER_PAGE' => 50,
'SORT_FIELD' => 'UF_SORT',
'SORT_ORDER' => 'ASC',
]
);
Делайте: для типового списка брендов начните с list и кастомизируйте шаблон. Не делайте: не пишите compileEntity, если штатный компонент закрывает задачу.
Прочитайте данные через compileEntity и getList
D7 ORM: Loader::includeModule('highloadblock') → getById → compileEntity → getDataClass → getList. Классы HighloadBlockTable, compileEntity и getDataClass - канон api_d7.
<?php
use Bitrix\Main\Loader;
use Bitrix\Highloadblock\HighloadBlockTable;
Loader::includeModule('highloadblock');
$hlblock = HighloadBlockTable::getById(BRAND_HL_ID)->fetch();
if (!$hlblock) return;
$entity = HighloadBlockTable::compileEntity($hlblock);
$dataClass = $entity->getDataClass();
$rows = $dataClass::getList([
'select' => ['ID', 'UF_NAME', 'UF_XML_ID'],
'filter' => ['=UF_ACTIVE' => 1],
'order' => ['UF_SORT' => 'ASC'],
'limit' => 50,
])->fetchAll();
Битый ID даёт Invalid highloadblock description - типичная ошибка на практике: getById(1) с Habr, на проде блок с ID=4. Кэшируйте $dataClass в static или Bitrix\Main\Data\Cache с TTL 3600, не compileEntity на каждый hit каталога.
Для вывода в шаблоне интернет-магазина getList удобен, когда нужна кастомная верстка списка брендов вне стандартного шаблона list. add/update/delete, AddResult и кэш entity - в гайде по Highload D7 CRUD - здесь только чтение, без дубля полного справочника операций.
Делайте: getById()->fetch() перед compileEntity. Не делайте: не наследуйте DataClass без getEntity - Unknown field definition.
Создайте HL через API для миграций
На staging: HighloadBlockTable::add с полями NAME и TABLE_NAME, затем UF_-поля через CUserTypeEntity. Удобно для Sprint Migration и install-скриптов модуля - TABLE_NAME и набор UF_* совпадают на dev и prod. На проде для разовой задачи быстрее админка.
Делайте: фиксируйте структуру HL в миграции. Не делайте: не вызывайте highloadblock до загрузки обработчика пользовательских полей в init.php - типичный bootstrap-конфликт из api_help.
Проверьте индексы UF_* и производительность
После 5-10k строк без индекса - full scan. Битрикс не ставит индексы на UF_* сам:
ALTER TABLE b_hlbd_brands ADD INDEX ix_xml_id (UF_XML_ID);
ALTER TABLE b_hlbd_brands ADD INDEX ix_name (UF_NAME);
После ADD INDEX - EXPLAIN: type ref/range, не ALL.
| Симптом | Исправление |
|---|---|
| Invalid highloadblock description | includeModule, сверить HLBLOCK_ID |
| getList пустой на проде | Константа с реальным ID, не HL=1 |
| Фильтр 4+ сек на 20k | ADD INDEX на UF_* из WHERE |
| Unknown field definition | Не наследуйте DataClass без getEntity |
Делайте: после выноса справочника прогоните фильтр под нагрузкой - в результате получите предсказуемое время ответа. Не делайте: не считайте HL ускорителем без индексов - это обычная MySQL-таблица с формой в админке.
Обзор кластера "highload блоки битрикс" - в хабе по Highload на CMS. Заложите поддержку сайта на мониторинг медленных запросов после выноса справочника.
Аудит каталога и вынос справочников - обсудим задачу. Кейсы - в портфолио.
Автор: Максим Мольков, разработчик 1С-Битрикс.
Источники: dev.1c-bitrix.ru, api_d7 highloadblock. Проверка: 30 июля 2026.
Частые вопросы
Что такое highload блок в битрикс?
Highload-блок (HL) в 1С-Битрикс: Управление сайтом - плоская таблица MySQL с UF_-полями и формой в админке "Контент → Highload-блоки". Для больших справочников без разделов и SEO-страниц; связь с каталогом через UF_XML_ID.
Чем highload отличается от инфоблока?
Инфоблок - контент с разделами, URL и SEO; для товаров и новостей. HL - плоский список кодов для связи с каталогом. 8 000 брендов в фильтре - HL; карточка товара с галереей - инфоблок.
Как создать highload блок битрикс?
"Контент → Highload-блоки → Добавить": NAME, TABLE_NAME (b_hlbd_*), UF_-поля (UF_NAME, UF_XML_ID, UF_ACTIVE), записать ID для BLOCK_ID и кода.
Как вывести highload блок на сайте?
Штатно: bitrix:highloadblock.list (BLOCK_ID, DETAIL_URL, ROWS_PER_PAGE) и highloadblock.view. В коде: Loader::includeModule, HighloadBlockTable::getById, compileEntity, getDataClass, getList.
Invalid highloadblock description - что делать?
Неверный ID, блок удалён или модуль не подключён. Loader::includeModule('highloadblock'), сверьте ID в админке, getById()->fetch() должен вернуть массив перед compileEntity.
Когда использовать Highload для каталога?
Когда свойства "список" раздулись до тысяч значений и фильтр тормозит. Бренды и города - в HL, в товаре UF_XML_ID. Товары с карточкой - в инфоблоке.
Можно ли создать HL только из кода?
Да: HighloadBlockTable::add и CUserTypeEntity для UF_*. CRUD через entityClass - в гайде D7 ORM CRUD (HighloadBlockTable, add, update, delete) на mvmolkov.ru/blog/ai/highload-d7-orm-crud-bitrix/.