ФиксИнтернет-магазин на 1С-Битрикс под ключ за 30 дней по фиксированной цене

Инфоблоки в 1С-Битрикс: версии 1.0 и 2.0, свойства и скорость каталога

Инфоблоки в 1С-Битрикс: версии 1.0 и 2.0, хранение свойств и скорость каталога

Почти всё, что вы видите на сайте под управлением 1С-Битрикс, — товары в каталоге, статьи в блоге, баннеры, вакансии, отзывы — хранится в одной и той же сущности: инфоблоке. Это фундамент платформы, и именно от того, как спроектированы инфоблоки, зависит, будет ли каталог из тридцати тысяч товаров открываться за доли секунды или задумываться на пару секунд на каждой странице. Ошибка в структуре инфоблока или неверно выбранная версия хранения свойств не всегда видна сразу — она проявляется, когда ассортимент вырастает, а вместе с ним растут и тормоза.

В этой статье разберём инфоблоки без общих слов: что это за хранилище, чем принципиально отличаются версии 1.0 и 2.0 (и почему это не просто цифра в настройках, а разная схема таблиц в базе), какие бывают типы свойств инфоблока и как они влияют на скорость, почему множественные свойства требуют осторожности, что такое торговый каталог поверх инфоблока, как работает современный доступ через D7 ORM \Bitrix\Iblock, когда выборки пора кэшировать и в какой момент данные разумнее вынести в highload-блок. Материал — выжимка из наших внедрений по разработке каталога товаров на 1С-Битрикс, где грамотная структура инфоблоков определяет и скорость, и удобство поддержки.

Коротко

  • Инфоблок — универсальное хранилище однотипных записей (товаров, статей): элементы с полями и произвольными свойствами, разложенные по разделам.
  • Версии 1.0 и 2.0 отличаются схемой хранения свойств: 1.0 — одна общая таблица значений, 2.0 — отдельная таблица под каждый инфоблок с колонками-свойствами.
  • Версия 2.0 обычно быстрее на выборках и фильтрации — это стандарт для товарного каталога.
  • Тип свойства выбирают под задачу: «Список» и справочники — для фильтра, привязки — для связей, highload-справочник — для значений с доп-полями.
  • Множественные свойства даже в 2.0 хранятся отдельными строками — включайте их только там, где значений действительно много.
  • Для нового кода используйте D7 ORM \Bitrix\Iblock и кэшируйте выборки; огромные однотипные наборы данных выносите в highload-блок.

Что такое инфоблок

Инфоблок (полностью — «информационный блок») — это штатный механизм 1С-Битрикс для хранения списков однотипных объектов. Представьте настраиваемую таблицу, у которой есть папки для группировки записей и произвольный набор колонок, который вы задаёте сами. Одна такая «таблица с папками и колонками» — это и есть инфоблок. Товарный каталог магазина, лента новостей, блог, отзывы, справочник магазинов, баннеры на главной — почти любой изменяемый контент на сайте под Битриксом лежит в инфоблоках.

Ключевых понятий три. Элемент — это одна запись: конкретный товар, конкретная статья. Раздел — папка-категория, в которую складывают элементы; разделы могут вкладываться друг в друга, образуя дерево каталога. Свойство — дополнительная характеристика элемента, которую вы придумываете под свою задачу: у товара это бренд, цвет, мощность, гарантия; у статьи — автор и время чтения. Помимо свойств у каждого элемента есть набор стандартных полей: название, символьный код, детальное и анонсное описание, картинки, даты, флаг активности, сортировка.

Почему это удобно? Потому что администратору не нужно программировать структуру данных — он собирает её мышкой в интерфейсе: создаёт инфоблок, добавляет нужные свойства, заводит разделы и наполняет элементами. А компоненты Битрикса (каталог, новости, поиск) умеют работать с любым инфоблоком одинаково, потому что все они устроены по единой модели. Эта универсальность — сильная сторона платформы: один и тот же движок обслуживает и блог из ста статей, и каталог из сотен тысяч товаров.

Терминология: «инфоблок» — само хранилище. «Тип инфоблока» — верхняя группировка хранилищ (например, «Каталог», «Контент»). «Элемент» — запись внутри инфоблока. «Раздел» — папка-категория. «Свойство» — произвольная характеристика элемента. Дальше в статье эти слова используются строго в этих значениях.

Инфоблоки в архитектуре Битрикса

Инфоблоки — это отдельный модуль платформы (iblock), от которого зависят почти все остальные функциональные части магазина. Модуль торгового каталога (catalog) надстраивается над инфоблоком, добавляя элементам цены, остатки и складской учёт. Модуль поиска индексирует элементы инфоблоков. Компоненты витрины — список каталога, карточка товара, умный фильтр — все читают данные из инфоблоков. Даже разделы меню и служебные справочники часто хранятся как инфоблоки.

Из этой центральной роли следует важная мысль: структура инфоблоков — это фундамент проекта. Если фундамент заложен грамотно (правильные типы свойств, разумная вложенность разделов, подходящая версия хранения), то каталог легко масштабируется, быстро отдаёт страницы и удобно поддерживается. Если же в структуре ошибки — например, характеристики заведены строками вместо списков, или включена версия 1.0 на большом каталоге, — то тормоза и боль в поддержке становятся системными, и лечить их приходится уже переделкой хранилища, что дороже и рискованнее, чем сделать правильно сразу.

Поэтому проектирование инфоблоков всегда идёт первым этапом при разработке магазина. Прежде чем рисовать витрину и настраивать фильтр, мы определяем: какие инфоблоки нужны, какие у них свойства и типов, как разложены разделы, какая версия хранения, где потребуется highload. Эти решения потом сложно менять, поэтому цена ошибки на старте высока, а цена правильного решения — минимальна.

Структура: типы, разделы, элементы, свойства

Данные в инфоблоках организованы иерархично, и полезно держать эту иерархию в голове целиком. Сверху вниз она выглядит так:

Эта структура повторяется для любого инфоблока: и блог, и каталог устроены одинаково, различаются только набором свойств и глубиной разделов. Понимание иерархии сразу подсказывает, где что настраивать: типы свойств — в настройках инфоблока, категории — в разделах, наполнение — в элементах.

Инфоблок Раздел «Смартфоны» Раздел «Ноутбуки» Раздел «Планшеты» Элемент «Модель A» Элемент «Модель B» Свойства элемента • Бренд (список) • Цвет (справочник) • Диагональ (число)
Схема: инфоблок делится на разделы, разделы содержат элементы, а у каждого элемента — общий для инфоблока набор свойств.

Как инфоблок хранится в базе данных

Чтобы понять разницу версий, нужно спуститься на уровень базы данных. Инфоблоки хранятся в наборе служебных таблиц MySQL. Сами инфоблоки описаны в одной таблице, разделы — в другой, элементы (их стандартные поля: название, код, даты, активность) — в третьей. А вот значения свойств — самое интересное — хранятся по-разному в зависимости от версии.

Стандартные поля элемента (ID, название, символьный код, дата, картинки) всегда лежат в общей таблице элементов, и здесь между версиями разницы нет. Отличается только хранение свойств — тех самых произвольных характеристик, которые вы добавили: бренд, цвет, диагональ. Именно способ их хранения и зашифрован в «версии инфоблока».

Почему это критично? Потому что реальный каталог — это не только название и цена, а десятки характеристик у каждого товара. Когда витрина выводит список из 36 товаров с их свойствами или фильтр перебирает тысячи позиций по цвету и бренду, база обращается именно к таблицам свойств. От того, как эти таблицы устроены, напрямую зависит, сколько запросов и объединений сделает СУБД, а значит — как быстро откроется страница. Отсюда и практический вес выбора версии.

Важно: «версия инфоблока» — это не про новизну функций, а про физическую схему хранения свойств в базе. И 1.0, и 2.0 — актуальные режимы, оба поддерживаются, но подходят для разных задач. Ниже разберём, чем они отличаются и как выбрать.

Версии инфоблока: 1.0 и 2.0

У инфоблока есть параметр «Способ хранения свойств», и у него два значения, которые исторически называют версиями 1.0 и 2.0. Оба способа делают одно и то же — хранят значения свойств элементов, — но организуют данные принципиально по-разному.

Версия 1.0 (единое хранилище значений). Все значения свойств всех инфоблоков сложены в одну общую таблицу. Каждая строка этой таблицы — это одно значение одного свойства одного элемента: «у элемента 100 свойство „бренд“ равно „Apple“». Если у товара десять свойств, для него в таблице десять строк. Плюс подхода — простота и гибкость: добавить свойство ничего не стоит, структура таблиц не меняется. Минус — чтобы собрать полный товар со всеми характеристиками, база должна собрать много разрозненных строк, а при фильтрации по нескольким свойствам сделать много объединений.

Версия 2.0 (отдельная таблица инфоблока). Для каждого инфоблока Битрикс создаёт собственную таблицу, где немножественные свойства становятся отдельными колонками, а один элемент — одной строкой. То есть «бренд», «цвет», «диагональ» — это столбцы, а товар — строка со значениями в этих столбцах. Плюс — выборка одного товара и фильтрация читаются из одной таблицы, часто одним запросом, что быстрее. Минус — таблица «шире», и структура базы жёстче привязана к набору свойств.

Итог простыми словами: 1.0 хранит свойства «вертикально» (много строк на один товар), 2.0 — «горизонтально» (одна строка, много колонок). Эта разница и определяет поведение под нагрузкой.

Версия 1.0 — общая таблица значений Версия 2.0 — таблица инфоблока элемент свойство значение Товар 100брендApple Товар 100цветчёрный Товар 100диагональ6.1 Товар 101брендSamsung Товар 101цветсиний Товар 101диагональ6.5 3 свойства = 3 строки на один товар много объединений при выборке элемент бренд цвет диаг. Товар 100Appleчёрн.6.1 Товар 101Samsungсиний6.5 Один товар = одна строка свойства — это колонки выборка и фильтр — по одной таблице меньше объединений → быстрее 2.0
Схема: в 1.0 свойства лежат строками в общей таблице (много строк на товар), в 2.0 — колонками в отдельной таблице инфоблока (одна строка на товар).

Хранение свойств: 1.0 против 2.0

Сведём различия в таблицу — это удобная шпаргалка при выборе версии для конкретного инфоблока.

КритерийВерсия 1.0Версия 2.0
Где лежат значенияОдна общая таблица на все инфоблокиОтдельная таблица под каждый инфоблок
Одиночное свойствоОтдельная строка значенияКолонка в таблице элемента
Один товар со свойствамиМного строкОдна строка
Скорость выборки и фильтраМедленнее на объёмеОбычно быстрее
Добавление свойстваБез изменения структуры таблицМеняет структуру таблицы инфоблока
Множественные свойстваСтроками в общей таблицеСтроками в отдельной таблице значений
Подходит дляНебольших вспомогательных инфоблоковТоварного каталога, больших списков

Важная оговорка про множественные свойства. Даже в версии 2.0 «горизонтальными» колонками становятся только немножественные свойства. Множественное свойство (у которого может быть несколько значений — например, «совместимые аксессуары») в 2.0 хранится в отдельной таблице множественных значений этого инфоблока, где на каждое значение снова приходится своя строка. То есть выигрыш 2.0 распространяется на одиночные свойства, а множественные и там остаются «вертикальными». Это ещё один аргумент не злоупотреблять множественностью.

Как версия влияет на скорость каталога

Теперь связка «версия → скорость» становится очевидной. Когда витрина выводит страницу каталога с 36 товарами, каждый из которых имеет, скажем, 15 характеристик, задача базы — собрать эти товары со всеми их свойствами. В версии 1.0 это означает много строк из общей таблицы значений и объединения по каждому свойству; чем больше свойств и товаров, тем тяжелее запрос. В версии 2.0 те же данные лежат колонками в одной таблице, и выборка идёт заметно короче.

Ещё нагляднее разница на умном фильтре. Фильтрация по нескольким свойствам одновременно («бренд Apple И цвет чёрный И диагональ от 6») в терминах 1.0 требует объединять общую таблицу значений саму с собой по каждому условию — это дорого. В 2.0 условия ложатся на колонки одной таблицы. Правда, здесь важная поправка: скорость умного фильтра в первую очередь обеспечивает фасетный индекс — заранее просчитанная структура, которая делает фильтр быстрым независимо от версии. Но фасет строится поверх данных инфоблока, и на 2.0 и построение, и обновление индекса идут комфортнее.

Практический вывод такой: на маленьком каталоге разницу версий вы, скорее всего, не заметите — тормозить нечему. Но по мере роста ассортимента (тысячи и десятки тысяч товаров, много свойств) версия 2.0 даёт ощутимо более предсказуемую производительность. Поэтому товарный каталог по умолчанию делают на 2.0, а вопрос скорости выборок дополнительно решают кэшированием и композитным режимом — об этом ниже.

Ориентир: версия хранения — это база, но не единственный фактор скорости. На большом каталоге на итог сильнее влияют кэш компонентов, фасетный индекс фильтра и грамотные выборки. 2.0 создаёт хороший фундамент, а полную скорость дают уже кэш и оптимизация запросов.

Когда какая версия нужна

Разберём по ситуациям, чтобы выбор был не «на глаз», а осознанным.

В большинстве проектов правило простое: всё, что относится к каталогу и большим спискам, — на 2.0; мелкие служебные инфоблоки живут как есть. Если сомневаетесь, выбирайте 2.0 — для роста это безопаснее.

Как узнать и сменить версию

Версия хранения задаётся в настройках конкретного инфоблока, в разделе управления инфоблоками административной части. Параметр называется «Способ хранения свойств» и предлагает выбор между «раздельным» (1.0) и хранением в отдельной таблице (2.0). Там же видно текущий режим.

Сменить версию можно в любой момент, но это операция с базой данных: при переключении на 2.0 Битрикс создаёт для инфоблока отдельную таблицу и переносит в неё значения немножественных свойств. Поэтому смену версии на боевом каталоге всегда делают аккуратно — с бэкапом, на копии для проверки, в часы низкой нагрузки. Подробнее порядок миграции разберём в отдельном разделе ниже.

Если вы пишете код и хотите узнать версию инфоблока программно, у объекта инфоблока есть служебное поле версии. Но на практике знать её нужно в основном в двух случаях: при отладке производительности выборок и при написании прямых SQL-запросов (что делать не рекомендуется — лучше идти через API). В обычной работе версия «просто настроена один раз» и дальше не трогается.

Разделы и вложенность каталога

Разделы — это дерево категорий каталога. Они хранятся в отдельной таблице и поддерживают произвольную вложенность: «Электроника → Смартфоны → Флагманы». Технически иерархия разделов реализована через модель вложенных множеств (nested sets) — специальную схему, которая позволяет быстро получать всё поддерево категории одним запросом, без рекурсии. Для витрины это значит, что «показать все товары раздела и его подразделов» работает эффективно.

С разделами связано несколько практических решений, влияющих и на скорость, и на SEO.

Грамотное дерево разделов — половина успеха каталога. Оно определяет и навигацию, и структуру URL, и логику умного фильтра (который работает в рамках раздела). Поэтому проектированию разделов уделяют столько же внимания, сколько и свойствам.

Символьные коды элементов и разделов

Символьный код (в интерфейсе — «Символьный код», в API — CODE) — это человекочитаемый идентификатор элемента или раздела, из которого формируются «человекопонятные» URL (ЧПУ). Вместо /catalog/element.php?ID=100500 покупатель видит /catalog/smartfony/iphone-15-pro/, где smartfony — код раздела, а iphone-15-pro — код элемента.

Несколько правил работы с символьными кодами, которые экономят нервы:

Символьные коды напрямую влияют на SEO каталога, поэтому их закладывают в проект осмысленно, а не «как сгенерилось». Хорошие коды — короткие, читаемые, отражающие суть товара или категории.

Типы свойств инфоблока

Свойства — это то, ради чего инфоблоки настолько гибки. Тип свойства определяет, какие значения оно принимает, как выглядит в админке и как ведёт себя в фильтре и выборках. Разберём основные типы и где какой уместен.

Тип свойстваЧто хранитГде применять
СтрокаПроизвольный текстАртикул, короткие заметки; не для фильтра
ЧислоЦелое или дробноеМощность, вес, диагональ; фильтр «от–до»
СписокЗначение из заданного набораБренд, материал; основной тип для фильтра
Дата/времяДату или дату со временемДата поступления, срок акции
ФайлКартинку или документДоп-фото, сертификат, инструкция (PDF)
HTML/текстФорматированный текстДоп-описание, характеристики блоком
Привязка к элементамСсылку на элементы другого ИБАксессуары, похожие товары, бренд-элемент
Привязка к разделамСсылку на разделыДополнительные категории товара
Да/Нет (флаг)Логическое значение«Хит», «Новинка», «Акция»
Привязка к highload-справочникуСсылку на запись справочникаЦвет с HEX, размер с сеткой, страна

Главное правило выбора типа: тип должен соответствовать тому, как со свойством будут работать. Если по характеристике фильтруют — это «Список», справочник или число, но не строка. Если это связь с другой сущностью — привязка. Если просто текст для показа — строка или HTML. Неверный тип не всегда мешает наполнению, но почти всегда мешает фильтру и выборкам, а переделывать его на живом каталоге дорого.

Тип свойства → где применять Список / Справочник Бренд, цвет, материал → умный фильтр Число Вес, диагональ, мощность → фильтр «от–до» Флаг «Да/Нет» Хит, новинка, акция → метки и подборки Привязка к элементам Аксессуары, похожие → связи между ИБ Файл Доп-фото, сертификат → медиа и документы Строка / HTML Артикул, доп-описание → показ, не фильтр Правило: тип свойства подбирают под способ использования фильтруют → список/число/справочник · связывают → привязка · показывают → строка/HTML
Схема: тип свойства выбирают по тому, как с ним будут работать — фильтровать, связывать или просто показывать.

Списки, справочники и привязки

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

Свойство «Список»

Список — это заранее заданный набор значений, из которого выбирают одно (или несколько при множественности). Это основной тип для характеристик, по которым фильтруют: бренд, материал, тип. Преимущество списка в том, что значения нормализованы — нет разнобоя «Apple» / «apple» / «Эппл», а фильтр строит по ним чистые фасеты. Значения списка хранятся отдельно, а у элемента лежит ссылка на значение.

Привязка к highload-справочнику

Когда значению свойства нужны дополнительные поля, простого списка мало. Классический пример — цвет: кроме названия «синий» хочется хранить HEX-код #0057FF и картинку-образец, чтобы в фильтре и карточке показывать цветные плашки. Для этого значения выносят в highload-справочник (отдельное хранилище на технологии highload-блоков), а свойству задают тип «Привязка к highload-справочнику». Плюс — богатые значения с любыми полями и переиспользование одного справочника в разных инфоблоках.

Привязки к элементам и разделам

Привязка к элементам связывает товар с элементами другого инфоблока: «похожие товары», «аксессуары», «бренд как отдельная сущность с логотипом и описанием». Привязка к разделам добавляет товар в дополнительные категории. Обе привязки — это способ выразить связи «многие ко многим» штатными средствами, без самописных таблиц. Но помните: привязки — это множественные значения, а значит, хранятся строками; много привязок на много товаров нагружают выборку, поэтому их держат в разумных пределах.

Практика: характеристики для фильтра — всегда «Список» или highload-справочник, никогда строка. Строковые «размеры» и «цвета» порождают дубли значений, ломают фасет и делают фильтр бесполезным. Это одна из самых частых и дорогих ошибок в структуре каталога.

Множественные свойства и скорость

Любое свойство можно сделать множественным — тогда у него будет не одно, а несколько значений. Это удобно: «совместимые модели», «доступные цвета», «теги». Но за удобство приходится платить производительностью, и важно понимать, почему.

Как мы разобрали выше, немножественное свойство в версии 2.0 хранится колонкой в таблице элемента и читается быстро — одной строкой на товар. А множественное свойство даже в 2.0 живёт в отдельной таблице множественных значений: на каждое значение — своя строка. Если у товара пять множественных свойств по десять значений в каждом, это 50 строк только на один товар. Умножьте на тысячи товаров в выдаче или на фильтрацию — и получите заметную нагрузку.

Отсюда практические правила обращения с множественностью:

  1. Включайте множественность только по необходимости. Если у характеристики почти всегда одно значение — делайте её немножественной. Одиночное свойство в 2.0 быстрее.
  2. Не фильтруйте по «тяжёлым» множественным свойствам без фасета. Прямая фильтрация по множественным значениям — дорогая операция. Умный фильтр спасает за счёт фасетного индекса, но сам фасет тоже растёт.
  3. Следите за числом значений. Множественное свойство с сотнями значений на элемент — сигнал, что данные, возможно, стоит вынести в highload или пересмотреть модель.
  4. Разделяйте «показать» и «фильтровать». Если множественный список нужен только для показа в карточке, не включайте у него участие в фильтре — не будете грузить фасет лишним.

Множественность — мощный инструмент, но именно она чаще всего оказывается причиной необъяснимых тормозов каталога. Аккуратное её применение — признак продуманной структуры.

Highload-справочник как тип свойства

Highload-справочник в роли значений свойства и highload-блок как отдельное хранилище — это связанные, но разные вещи, и их полезно не путать.

Highload-справочник как тип свойства — это когда значения свойства (цвета, размеры, страны) лежат в highload-справочнике, а свойство инфоблока просто ссылается на нужную запись. Вы получаете значения с произвольными доп-полями (HEX, картинка, сортировка, англоязычное написание) и можете переиспользовать один справочник в нескольких инфоблоках. Для витрины это выглядит как обычное свойство-список, но «богаче».

Highload-блок как хранилище — это самостоятельная сущность для больших однотипных наборов данных, которые не нужно показывать как элементы каталога и раскладывать по разделам. О нём подробно — в разделе про вынос данных ниже и в отдельном материале про highload-блоки в 1С-Битрикс.

Когда стоит выбрать highload-справочник вместо обычного списка для свойства:

Торговый каталог поверх инфоблока

Сам по себе инфоблок — это про хранение и структуру. Чтобы элементы стали товарами с ценами, остатками и продажей, над инфоблоком надстраивается модуль торгового каталога. Технически это выглядит так: инфоблок помечается как «Торговый каталог», и у его элементов появляются связанные сущности — цены (разных типов), складские остатки, единицы измерения, скидки, торговые предложения.

Важно понимать разделение ответственности. Инфоблок хранит саму карточку и характеристики (название, бренд, цвет, описание). Торговый каталог добавляет коммерцию (цены, остатки, склады). Эти данные лежат в разных таблицах, но привязаны к одному элементу. Поэтому, когда вы проектируете каталог, вы сначала решаете вопросы инфоблока (свойства, разделы, версия), а потом — вопросы торгового каталога (типы цен, склады, предложения).

Отдельная большая тема — торговые предложения (SKU), когда у одного товара есть вариации по размеру и цвету с собственными ценами и остатками. Технически это второй инфоблок, связанный с первым, и над ним тоже надстроен торговый каталог. Мы подробно разбираем это в статье про торговые предложения (SKU) в 1С-Битрикс. Здесь важно запомнить: и товары, и их предложения — это всё те же инфоблоки, просто с надстройкой торгового каталога, и всё сказанное про версии, свойства и скорость к ним полностью применимо.

Важно: цена и остаток — это не свойства инфоблока, а данные модуля торгового каталога. Не пытайтесь хранить цену свойством инфоблока: вы потеряете типы цен, скидки, валюты и корректную работу корзины. Инфоблок — характеристики, торговый каталог — коммерция.

Индексы и оптимизация выборок

Даже на версии 2.0 большой каталог может тормозить, если выборки не оптимизированы. Разберём, за счёт чего добиваются скорости на уровне базы и API.

Общий принцип: база должна делать как можно меньше работы на каждый запрос витрины. Правильная версия хранения даёт хороший старт, но окончательную скорость обеспечивают продуманные выборки, индексы и, главное, кэширование, к которому мы переходим.

D7 ORM: пространство \Bitrix\Iblock

Исторически с инфоблоками работали через «старый» процедурный API — классы вроде CIBlockElement с методом GetList. Он до сих пор работает и поддерживается, но для нового кода в Битриксе есть современный объектный слой D7 — ORM в пространстве имён \Bitrix\Iblock. Он даёт типизированные выборки, удобную работу со связями и встроенное кэширование.

Сравним подходы на простой задаче — получить активные элементы раздела. Старый стиль:

<?php
$res = CIBlockElement::GetList(
    ['SORT' => 'ASC'],
    ['IBLOCK_ID' => 5, 'ACTIVE' => 'Y', 'SECTION_ID' => 12],
    false,
    ['nPageSize' => 36],
    ['ID', 'NAME', 'PROPERTY_BREND']
);
while ($el = $res->GetNext()) {
    echo $el['NAME'] . ' — ' . $el['PROPERTY_BREND_VALUE'] . "\n";
}

Современный D7-подход через API инфоблоков (после подключения модуля и получения класса сущности элемента для нужного инфоблока) читается чище и безопаснее по типам:

<?php
use Bitrix\Main\Loader;
use Bitrix\Iblock\Elements\ElementCatalogTable; // класс сущности инфоблока

Loader::includeModule('iblock');

$elements = ElementCatalogTable::getList([
    'select' => ['ID', 'NAME', 'BREND_' => 'BREND.ITEM'],
    'filter' => ['=ACTIVE' => 'Y', '=IBLOCK_SECTION_ID' => 12],
    'order'  => ['SORT' => 'ASC'],
    'limit'  => 36,
    'cache'  => ['ttl' => 3600],
])->fetchCollection();

foreach ($elements as $el) {
    echo $el->getName() . ' — ' . $el->get('BREND')->getItem()->getValue() . "\n";
}

Что даёт D7 на практике: выборки с понятными фильтрами и связями (referenced-поля вместо ручных объединений), коллекции объектов вместо ассоциативных массивов, встроенный параметр кэша прямо в запросе, и в целом код, который проще читать и поддерживать. Мы пишем новую логику по работе с инфоблоками на D7, а старый код трогаем только по необходимости — переписывать рабочее ради стиля смысла нет.

Совет: не смешивайте старый и новый API в одном участке кода без причины. Выберите стиль под задачу: правите старый модуль — оставайтесь в его стиле; пишете новое — берите D7. Мешанина усложняет отладку и кэширование.

Кэширование выборок из инфоблока

Кэширование — главный инструмент скорости на большом каталоге, важнее самой версии хранения. Смысл простой: результат тяжёлой выборки сохраняется, и повторные запросы отдают готовый результат, не трогая базу. На каталоге, где данные меняются раз в час (после обмена с 1С), нет смысла спрашивать базу на каждом хите тысяч посетителей.

В Битриксе несколько уровней кэша, и они складываются:

Ключевая тонкость — инвалидация: кэш должен сбрасываться при изменении данных, иначе покупатель увидит старую цену или пропавший товар. Именно поэтому предпочитают управляемый кэш с тегами: он привязан к сущностям и сбрасывается точечно. Настройка кэширования — это отдельная инженерная работа, которой мы посвятили подробный разбор про кэширование в 1С-Битрикс. Здесь запомним главное: версия 2.0 даёт быстрый фундамент, но настоящую скорость каталога обеспечивает грамотно настроенный многоуровневый кэш.

Когда выносить данные в highload-блок

Инфоблок универсален, но универсальность стоит служебной обвязки: разделы, права на элемент, привязка картинок, поддержка версий свойств. Для товаров эта обвязка нужна. А для больших однотипных наборов данных, которым разделы и картинки не требуются, она — лишний груз. В таких случаях данные выносят в highload-блок.

Highload-блок — это хранилище на отдельной таблице с доступом через D7 ORM, спроектированное под большие объёмы однотипных записей. У него нет разделов, нет визуального дерева, нет тяжёлой обвязки инфоблока — только таблица и быстрый ORM-доступ. Кандидаты на вынос:

ДанныеИнфоблок или highloadПочему
Товары каталогаИнфоблокНужны разделы, картинки, торговый каталог, фильтр
Справочник цветов с HEXHighload-справочникБогатые значения, переиспользование в свойствах
Таблица соответствия артикуловHighload-блокМного однотипных строк, не показывается как каталог
История цен, логиHighload-блокОгромный объём, только запись и выборка
Геоданные (города, ПВЗ)Highload-блокСотни тысяч записей без разделов
Статьи блогаИнфоблокНужны разделы, картинки, показ как контент

Ориентир для решения: если записей очень много, они однотипны, не нуждаются в разделах и не показываются как элементы каталога — это кандидат в highload. Если данным нужны категории, картинки штатными средствами, права на элемент или торговый каталог — остаётесь в инфоблоке. Товары почти всегда живут в инфоблоке; в highload уходят справочники и служебные массивы данных.

Нужны разделы, картинки, каталог? Инфоблок • Товары каталога • Статьи, новости, отзывы • Разделы и вложенность • Торговый каталог, фильтр Highload-блок • Справочники цветов, стран • Таблицы соответствий • История цен, логи • Сотни тысяч однотипных строк Да Нет
Схема: если данным нужны разделы, картинки и торговый каталог — это инфоблок; если это большой однотипный массив без разделов — highload-блок.

Миграция инфоблока 1.0 → 2.0

Если каталог рос на версии 1.0 и начал тормозить, перевод на 2.0 — разумный шаг. Но это операция с базой данных, и делать её нужно по порядку, а не «щёлкнуть переключатель на проде».

  1. Сделайте резервную копию. Полный бэкап базы перед любыми структурными изменениями — обязателен. Если что-то пойдёт не так, откат должен быть под рукой.
  2. Проверьте на копии. Прогоните миграцию на тестовой копии сайта, замерьте время и убедитесь, что данные перенеслись корректно, а витрина работает.
  3. Выберите окно низкой нагрузки. На больших каталогах перенос значений в новую таблицу может идти заметное время, в течение которого возможны блокировки. Делайте это ночью или в технологическое окно.
  4. Переключите версию. В настройках инфоблока смените способ хранения на 2.0. Битрикс создаст таблицу инфоблока и перенесёт немножественные свойства.
  5. Перестройте фасетный индекс. После смены версии обязательно пересоберите фасет умного фильтра — иначе фильтр покажет неверную картину.
  6. Проверьте кастомный код. Если у вас есть прямые SQL-запросы к таблицам свойств или самописные выборки, они могут зависеть от схемы. Проверьте и, при необходимости, поправьте их под 2.0.
  7. Проверьте обмен с 1С. Прогоните тестовый обмен: убедитесь, что цены, остатки и свойства раскладываются корректно, а дубли не появляются.

Обычно основную сложность создаёт не сама смена версии, а самописный код, который лез в структуру напрямую. Если проект написан «по-битриксовому» — через API и компоненты, — миграция проходит гладко. Если в нём много прямых запросов к базе — сначала аудит кода, потом миграция. Это ещё один довод писать всё через штатный API и D7, а не в обход.

Лимиты и большие каталоги

«Сколько товаров выдержит инфоблок?» — частый вопрос. Жёсткого лимита на число элементов у инфоблока нет: ограничения — это возможности сервера и базы данных. На практике каталоги в сотни тысяч и миллионы позиций на Битриксе работают, но требуют инженерной аккуратности. Что становится узким местом при росте:

Стратегия для большого каталога складывается из уже названного: версия 2.0 как фундамент, минимум множественных свойств, вынос тяжёлых справочников в highload, агрессивное многоуровневое кэширование, композитный режим, тяжёлые операции по расписанию и оптимизированный обмен. Ни один из этих приёмов по отдельности не решает всё — работает именно их сумма. Когда каталог переваливает за десятки тысяч активных товаров с богатой фильтрацией, к архитектуре подходят как к отдельной инженерной задаче.

Ориентир: проблема больших каталогов на Битриксе — почти всегда не «сам движок не тянет», а неоптимальная структура и отсутствие кэша. Правильная версия, аккуратные свойства и настроенный кэш поднимают потолок в разы без смены платформы.

Частые ошибки

Мини-FAQ. Можно ли на одном сайте держать инфоблоки разных версий? Да, это нормально: товарный каталог — на 2.0, мелкие служебные инфоблоки — как удобно. Версия задаётся у каждого инфоблока отдельно и на другие не влияет.

Чек-лист по инфоблокам каталога

Сведём в практический список то, что проверяют при проектировании и приёмке структуры инфоблоков перед запуском каталога.

  1. Версия под задачу. Товарный каталог и большие списки — на 2.0; мелкие служебные инфоблоки — как удобно.
  2. Типы свойств корректны. Характеристики для фильтра — «Список» или highload-справочник; связи — привязки; показ — строка/HTML. Строк в фильтре нет.
  3. Множественность обоснована. Множественные свойства включены только там, где значений действительно несколько; одиночные — немножественные.
  4. Разделы спроектированы. Дерево категорий 3–4 уровня, осмысленные символьные коды разделов, продуманные дополнительные привязки.
  5. Символьные коды заданы. Транслитерация настроена, коды уникальны, читаемы и не меняются после индексации.
  6. Коммерция — в торговом каталоге. Цены, остатки, склады и предложения — через модуль каталога, а не свойствами инфоблока.
  7. Тяжёлые данные — в highload. Справочники с доп-полями и большие однотипные массивы вынесены из инфоблоков.
  8. Выборки оптимизированы. Выбираются только нужные поля, есть постраничность, под нагрузку добавлены индексы.
  9. Кэш настроен. Кэш компонентов, managed cache с тегами, при необходимости композит; инвалидация работает при изменении данных.
  10. Фильтр на фасете. Умная фильтрация включена у нужных свойств, фасетный индекс построен и пересобирается после обмена.
  11. Код на API и D7. Прямых SQL к таблицам свойств нет; новая логика — на \Bitrix\Iblock; миграция версии не сломает выборки.

Вывод

Инфоблоки — это фундамент, на котором стоит весь каталог и контент магазина на 1С-Битрикс. Разобравшись в том, как они устроены, вы принимаете решения не наугад, а осознанно: выбираете версию хранения под размер каталога, задаёте свойствам правильные типы под фильтр и связи, не злоупотребляете множественностью, выносите тяжёлые справочники в highload и опираетесь на кэш там, где база иначе не справится. Разница между 1.0 и 2.0 — это не косметика, а разная схема таблиц, и на большом каталоге она напрямую превращается в секунды загрузки.

Практический вывод один: структуру инфоблоков закладывают правильно с самого начала, потому что менять её на живом каталоге дорого и рискованно. Товарный каталог — на 2.0, характеристики для фильтра — списками и справочниками, коммерция — в торговом каталоге, большие массивы — в highload, а скорость — на кэше и оптимизированных выборках через D7. Сделайте это аккуратно, и каталог будет одинаково быстрым и на трёх тысячах, и на трёхстах тысячах товаров. А если структуру нужно спроектировать или переработать под рост — мы помогаем с этим в рамках разработки интернет-магазинов на 1С-Битрикс, где грамотные инфоблоки закладываются в основу проекта. Больше разборов по теме — в рубрике «Каталог и поиск».

Частые вопросы

Что такое инфоблок в 1С-Битрикс простыми словами?

Инфоблок (информационный блок) — это универсальное хранилище однотипных записей в 1С-Битрикс: товаров, статей, новостей, вакансий, отзывов. Каждая запись — это элемент, у элемента есть стандартные поля (название, описание, картинка, дата) и произвольные свойства, которые вы задаёте сами: бренд, цвет, мощность, автор. Элементы можно раскладывать по разделам-папкам с любой вложенностью. По сути инфоблок — это настраиваемая таблица с папками и дополнительными колонками, вокруг которой построен весь контент и весь каталог магазина. Товарный каталог, блог, баннеры на главной — почти всё это отдельные инфоблоки.

Чем версия инфоблока 2.0 отличается от 1.0?

Разница в том, как физически хранятся значения свойств. В версии 1.0 все свойства всех элементов лежат в одной общей таблице значений, где каждое значение — отдельная строка; чтобы собрать один товар с десятью свойствами, база делает много обращений. В версии 2.0 для каждого инфоблока создаётся собственная таблица, где немножественные свойства становятся отдельными колонками, а один элемент — одной строкой. За счёт этого выборка и фильтрация в 2.0 обычно заметно быстрее, особенно на больших каталогах. Для товарного каталога 2.0 — стандартный и рекомендуемый выбор.

Какие типы свойств бывают у инфоблока?

Базовые типы: строка, число, список (заранее заданный набор значений), дата/время, файл (картинка или документ), HTML/текст, привязка к элементам другого инфоблока, привязка к разделам, флаг «да/нет», а также привязка к highload-справочнику. У каждого свойства можно включить множественность (несколько значений) и обязательность. Тип выбирают под задачу: для характеристик, по которым фильтруют, берут «Список» или справочник, для связей между сущностями — привязки, для больших наборов значений с доп-полями (палитра цветов с HEX) — highload-справочник.

Множественные свойства замедляют каталог?

Да, при неаккуратном использовании. В версии 2.0 немножественное свойство хранится колонкой в основной таблице элемента и читается быстро. А вот множественное свойство даже в 2.0 хранится в отдельной таблице значений, и на каждое значение — своя строка. Если у товара десяток множественных свойств с длинными списками значений, выборка и особенно фильтрация по ним нагружают базу. Поэтому множественность включают только там, где значений действительно много (например, «совместимые модели»), а одиночные характеристики оставляют немножественными.

Что быстрее для фильтра — свойство инфоблока или highload-справочник?

Сама по себе скорость умного фильтра в первую очередь определяется фасетным индексом, а не тем, где лежат значения. Highload-справочник как тип свойства удобен, когда у значения есть дополнительные поля (HEX-код цвета, картинка-образец, англоязычное написание, сортировка) и когда одни и те же значения переиспользуются во многих инфоблоках. Highload-блок как отдельное хранилище (не свойство) оправдан для огромных объёмов записей, которые не нужно раскладывать по разделам и показывать как элементы каталога: логи, справочники географии, таблицы соответствий.

Как перевести инфоблок с версии 1.0 на 2.0?

Версия переключается в настройках инфоблока в административном разделе — параметр «Способ хранения свойств». При смене на 2.0 Битрикс создаёт для инфоблока отдельную таблицу и переносит в неё значения немножественных свойств. Операция затрагивает структуру базы, поэтому её делают на копии, с бэкапом и в часы низкой нагрузки, а после — проверяют выборки, фильтр и обмен. На больших каталогах перенос может идти заметное время. После миграции обязательно перестраивают фасетный индекс умного фильтра и проверяют, что кастомный код, который писал в свойства напрямую, работает с новой схемой.

Когда данные лучше вынести из инфоблока в highload-блок?

Когда записей очень много (сотни тысяч и миллионы), они однотипны, не требуют разделов, прав на элемент, привязки картинок штатными средствами и не должны показываться как элементы каталога. Классические кандидаты: справочники цветов и размеров с доп-полями, таблицы соответствия артикулов, история цен, геоданные, большие таблицы характеристик для сравнения. Highload-блок хранит такие данные в отдельной таблице с ORM-доступом D7 и работает на больших объёмах эффективнее, чем инфоблок, у которого много служебной обвязки. Товары же почти всегда остаются в инфоблоке, потому что им нужны разделы, картинки и торговый каталог.

Обязательно ли использовать D7 ORM для работы с инфоблоками?

Нет, но желательно для нового кода. Исторический API (CIBlockElement::GetList и подобные) продолжает работать и поддерживается. Современный D7-подход через пространство имён \Bitrix\Iblock и ORM-классы даёт типобезопасные выборки, удобные связи (referenced-поля), встроенное кэширование и более чистый код. На проектах мы пишем новую логику на D7, а старый код трогаем только по необходимости, чтобы не переписывать рабочие вещи ради переписывания. Главное — не смешивать в одном месте оба стиля без причины.

Поделиться:

Каталог тормозит или структуру нужно заложить на вырост?

Спроектируем инфоблоки под ваш ассортимент: выберем версию хранения и типы свойств, разложим разделы, вынесем тяжёлые справочники в highload, настроим фильтр и кэш — так, чтобы каталог оставался быстрым при росте. Рассчитаем стоимость по вашему проекту.

Услуга «Каталог товаров»

Игорь Воскресенский

Основатель студии B2Bsite. С 2014 года команда разрабатывает и поддерживает интернет-магазины и корпоративные сайты на 1С-Битрикс, проектирует структуру инфоблоков, настраивает свойства, умный фильтр, highload-блоки и кэширование для среднего и крупного бизнеса.

← Все статьи блога