Отключаем ненужные свойства инфоблоков из выборки — компонент должен брать только то, что действительно выводит
Дата публикации: 24.06.2026

Отключаем ненужные свойства инфоблоков из выборки — компонент должен брать только то, что действительно выводит

Хочу себе такие же кнопки
ccb9a536

Что вы узнаете и почему это важно

В Bitrix — этоиноблоки — мозг любого каталога, новостей или любого списка товаров. Если из инфоблока в компонент попадает лишняя информация, сервер тратит время и память на её обработку, а ваш сайт «тормозит». Мы покажем, как отключить ненужные свойства инфоблоков в выборке, чтобы компонент получал только те поля, которые действительно выводятся на странице. Вы увидите, как ускорить запросы, снизить нагрузку на VDS и улучшить пользовательский опыт без потери функциональности.


1. Почему «все свойства» — это плохая идея

Сценарий Что происходит в БД Последствия
Вы запрашиваете полный список свойств (SELECT * FROM b_iblock_element_prop_sX) СУБД читает каждое свойство, даже если в шаблоне его нет Увеличивается время выполнения запроса, растёт объём передаваемых данных, рост нагрузки на CPU и ОЗУ
На странице выводятся только название и цена Остальные свойства (цвет, размер, артикул…) остаются «позади» Память тратится зря, а пользователю не видно выгоды от этих данных

Аналогия: представьте, что вы готовите салат и берёте все овощи из холодильника, а потом выбрасываете всё, кроме помидоров и огурцов. Время готовки растёт, а вкус тот же. Точно так же в Bitrix — чем меньше полей в запросе, тем быстрее работает сайт.


2. Основные понятия

Термин Описание
Инфоблок Хранилище элементов (товары, статьи) с набором свойств
Свойство Дополнительный атрибут элемента (цвет, вес, бренд)
Компонент PHP‑модуль, который получает данные из инфоблока и выводит их
Select‑массив Список полей, которые компонент запрашивает у БД
Cache Кеширование результатов запросов, ускоряющее повторные обращения

3. Как «отключить» свойства в компоненте

3.1. Стандартный способ (по‑умолчанию)

$arSelect = array("*");               // выбираем всё
$arFilter = array("IBLOCK_ID"=>5);
$res = CIBlockElement::GetList(
        array(),
        $arFilter,
        false,
        false,
        $arSelect
);

"*" заставляет ядро собрать все поля и свойства. Это удобно, но в продакшене почти всегда избыточно.

3.2. Явное указание нужных полей

$arSelect = array(
    "ID",
    "NAME",
    "DETAIL_PAGE_URL",
    "PROPERTY_PRICE",      // только цена
    "PROPERTY_PHOTO",      // только фото
);

Не забудьте добавить свойства, которые действительно выводятся в шаблоне. Если в шаблоне вы выводите PROPERTY_PRICE и PROPERTY_PHOTO, а в $arSelect их нет, то в $arResult они будут пустыми.

3.3. Отключение «лишних» свойств через CUserFieldEnum::GetList

Если вам нужно полностью отключить свойство в инфоблоке (чтобы оно не загружалось ни в каком запросе), можно использовать параметр PROPERTY_CODE в CIBlockElement::GetList:

$arSelect = array("ID","NAME","DETAIL_PAGE_URL");
$arFilter = array(
    "IBLOCK_ID"=>5,
    "ACTIVE"=>"Y",
);
$propertyCodes = array("PRICE","PHOTO"); // только нужные свойства

$res = CIBlockElement::GetList(
        array(),
        $arFilter,
        false,
        false,
        $arSelect,
        array("PROPERTY_CODE"=>$propertyCodes)
);

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

3.4. Кеширование запросов

$cache = new CPHPCache();
$cacheTime = 3600; // 1 час
$cacheId   = "my_block_5_price_photo_".LANGUAGE_ID;
$cachePath = "/my_component/";

if($cache->InitCache($cacheTime, $cacheId, $cachePath)) {
    $arResult = $cache->GetVars();
} else {
    $cache->StartDataCache();
    $res = CIBlockElement::GetList(...);
    while($ob = $res->GetNextElement()){
        $arResult[] = $ob->GetFields();
    }
    $cache->EndDataCache($arResult);
}

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


4. Практический пример: каталог товаров

4.1. Что выводим в шаблоне

<h2><?= $item["NAME"] ?></h2>
<p>Цена: <?= $item["PROPERTY_PRICE_VALUE"] ?> ₽</p>
<img src="<?= $item["PROPERTY_PHOTO_VALUE"] ?>" alt="">

Только NAME, PROPERTY_PRICE, PROPERTY_PHOTO нужны.

4.2. Минимальный Select‑массив

$arSelect = array(
    "ID",
    "NAME",
    "DETAIL_PAGE_URL",
    "PROPERTY_PRICE",
    "PROPERTY_PHOTO"
);

4.3. Полный код компонента

<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

$iblockId = 5; // ваш инфоблок
$arSelect = array("ID","NAME","DETAIL_PAGE_URL","PROPERTY_PRICE","PROPERTY_PHOTO");
$arFilter = array("IBLOCK_ID"=>$iblockId,"ACTIVE"=>"Y");

// Кеш
$cache = new CPHPCache();
$cacheTime = 7200; // 2 часа
$cacheId   = "catalog_{$iblockId}_".LANGUAGE_ID;
$cachePath = "/catalog/";

if($cache->InitCache($cacheTime,$cacheId,$cachePath)){
    $arResult = $cache->GetVars();
}else{
    $cache->StartDataCache();
    $res = CIBlockElement::GetList(array("SORT"=>"ASC"),$arFilter,false,false,$arSelect);
    while($ob = $res->GetNextElement()){
        $arResult[] = $ob->GetFields();
    }
    $cache->EndDataCache($arResult);
}

// Передаём в шаблон
$this->IncludeComponentTemplate();
?>

4.4. Что происходит под капотом

  1. Select‑массив ограничивает запрос только нужными колонками.

  2. GetList формирует SQL‑запрос вида:

    SELECT ID, NAME, DETAIL_PAGE_URL, PROPERTY_5_PRICE, PROPERTY_5_PHOTO
    FROM b_iblock_element
    WHERE IBLOCK_ID = 5 AND ACTIVE = 'Y'
    ORDER BY SORT ASC
  3. Кеш сохраняет полученный массив $arResult. При следующем запросе (в пределах 2 часов) БД не задействуется.


5. Как проверить, что лишних полей действительно нет

Шаг Действие Что искать
1 Включить SHOW_SQL в php.ini или использовать debug‑модуль Длинный запрос с * → должен быть коротким с перечисленными полями
2 Посмотреть $_SERVER["REQUEST_TIME_FLOAT"] до и после запроса Разница в миллисекундах, чем меньше — тем лучше
3 Открыть /bitrix/admin/iblock_element_edit.php и посмотреть $arResult в debug‑консоли Нет полей, которых нет в шаблоне

Если в запросе всё ещё появляются ненужные свойства, проверьте, нет ли в шаблоне скрытого обращения к $item["PROPERTY_..."].


6. Частые ошибки и как их избежать

Ошибка Почему происходит Как исправить
PROPERTY_..._VALUE пустой Свойство не включено в Select Добавьте нужное свойство в массив $arSelect
Кеш не обновляется после добавления нового свойства Кеш‑ид не меняется Включите в cacheId хеш списка свойств, например md5(implode(',',$arSelect))
Запрос всё равно медленный Фильтры ($arFilter) слишком общие, нет индексов Добавьте индексы в БД по полям IBLOCK_ID, ACTIVE, PROPERTY_...
Свойство не выводится, хотя указано в Select В шаблоне используется другое имя (PROPERTY_..._DESCRIPTION) Проверьте, какое конкретно поле вам нужно (VALUE, DESCRIPTION, ENUM_ID) и укажите его в Select

7. Лучшие практики

Практика Описание
Явно перечисляйте свойства Никогда не используйте "*" в продакшене
Группируйте запросы Если на странице несколько компонентов, объединяйте их запросы в один, используя CIBlockElement::GetList с объединённым Select
Контролируйте кеш Делайте cacheId уникальным для каждой комбинации свойств и фильтров
Профилируйте Регулярно проверяйте SHOW_SQL и время выполнения запросов
Обновляйте индексы После добавления новых свойств или изменения структуры инфоблока переиндексируйте таблицы

Практика для закрепления

  1. Выберите инфоблок с минимум пятью свойствами (цвет, размер, бренд, цена, изображение). Составьте массив $arSelect, который будет содержать только те свойства, которые выводятся в шаблоне (название, цена, изображение).
  2. Измените существующий компонент (например, catalog.section) так, чтобы он использовал ваш $arSelect. Проверьте в логах, что запрос к БД больше не содержит PROPERTY_COLOR и PROPERTY_BRAND.
  3. Добавьте кеш с временем жизни 30 минут и убедитесь, что после первого запроса в логах нет новых SQL‑запросов.
  4. Сравните производительность: измерьте время выполнения страницы до и после оптимизации (используйте microtime(true) до и после CIBlockElement::GetList). Запишите разницу.
  5. Создайте тестовый шаблон, в котором выводятся только NAME и PRICE. Попробуйте добавить в $arSelect свойство PROPERTY_WEIGHT, но не выводите его в шаблоне. Что изменится в запросе и в времени выполнения? Объясните, почему.

Следуя этим шагам, вы избавитесь от лишних данных в выборке, ускорите работу сайта на Bitrix и снизите нагрузку на ваш VDS‑сервер. Удачной оптимизации!


CamZamZam - онлайн фото с вебкамеры с эффектами
Cartoon Network: игры с персонажами
Чат рулетка в 2026: будущие функции
Эксперт по доменным стратегическим решениям
Хостинг для e-commerce проектов
Как играть в слоты
Как настроить CDN для сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как оптимизировать производительность сайта с хостингом Host.bg
Как выбрать правильный хостинг для вашего сайта
Какие бывают ЛОР болезни у детей
Кассовые терминалы с оплатой картами
LOL куклы витрина детская
Лучшие видеорегистраторы для водителей
Онлайн QR-код сканер
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Основы настройки веб-хостинга: что вам нужно знать
Партнёрская программа без блога: как получать трафик из Telegram
Профессиональные хитрости для пользователей хостинга Host.bg
Регистрация ИП в Москве для иностранных граждан
Сравнение хостинга Host.bg с другими провайдерами
Субтитры — нет, уши — включены: погружение в английский за 5 минут
Сумки с бусинами
Техника для строительства загородных трасс
ТОП-10 VPS для разработчика: рейтинг серверов под рабочие задачи
WordPress блог для бизнеса
рейтинг хостингов 2026 Быстрые VDS серверы