it-blog.club
Highload-блоки vs Инфоблоки

Highload-блоки vs Инфоблоки

Скорее всего уже большинство битрикс разработчиков сталкивались с вопросом, что лучше использовать для хранения данных на сайте. Если раньше мы могли использовать только информационные блоки, то теперь у нас имеются ещё и Highload-блоки. Появились они кстати с 14 версии CMS, так что надеюсь, что вы не сидите на версиях битрикса древнейшего и уже успели обновиться хотя бы до 17.0.

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

Разработка

Начать можно сразу с разработки. Так как Highloadblock появились только в ядре D7, то (на данный момент) толком ещё не имеется нормальной документации по работе с ними. Да и не так много разработчиков их используют, просто потому что не умеют с ними работать (разумеется, если у вас крупная веб-студия, то скорее всего у вас все сотрудники знают что это и как с этим жить, но уж поверьте, в последнее время, просто каждый встречающийся мне разработчик про HL блоки даже и не слышал). По этой причине внятную информацию по ним находить довольно сложно, но хоть с каждым днём это становится всё проще.

Если говорить про сам процесс разработки, то на мой взгляд он действительно сложнее чем разработка на инфоблоках. Если у вторых уже набита рука, есть документация и вроде всё просто. То с HL блоками придётся немного больше попотеть.

Ну как минимум вам необходимо обязательно использовать необходимое пространство:

use Bitrix\Highloadblock\HighloadBlockTable as HL;

Далее пишем функцию для создания класса, необходимого для работы с таблицами HL


use Bitrix\Highloadblock\HighloadBlockTable as HL; CModule::IncludeModule('highloadblock'); function GetClassHL($IDHL) {     $hlblock = HL::getById($IDHL)->fetch();     $ComEnt = HL::compileEntity($hlblock);     $CL = $ComEnt->getDataClass();     return $CL; }

Данный метод следует прописать в самом начале вашего самописного компонента и использовать его далее. Например при получении записей из блока:


$CL = GetClassHL(*тут ID HL блока*); $Data = $CL::getList(array(
'select' => array('*'),
'filter' => array('UF_COLOR' => 'RED'),
)); while($el = $rsData->fetch()) { var_dump($el); }

Получаем все записи конкретного HL у который поле COLOR имеет значение RED.

Если сравнивать с инфоблоком, то тут всё на много проще.


CModule::IncludeModule("iblock"); $arElement = CIBlockElement::GetList( array(), array( 'IBLOCK_ID' => *ID инфоблока*, 'ID' => *ID элемента*, ), false, false, array( 'ID', 'IBLOCK_ID', 'PROPERTY_*' ) ); $element = $arElement->GetNext();

НО! Так же не стоит забывать, что при использовании методов для работы с ИБ вы получите массив не только нужных вам полей и свойств, а так же и кучу лишнего мусора. А так же будет совершенно несколько запросов к БД, что создаст дополнительную нагрузку. В тот момент как при работе с HL количество запросов в разы меньше. Вы так же получите только необходимые для вас данные и при этом получение данных пройдёт на много быстрее.

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

Собственно именно по этом Highload-блок так и называется, и рассчитаны они под большие объёмы данных и частые запросы. Например у вас имеется 100 000 различных цветов для всех товаров в каталоге. На много правильнее было бы держать такие данные именно в HL блоках.

По этому хотел бы отметить тот факт, что разработка на HL блоках конечно будет сложнее чем на ИБ, но зато мы можем без ущерба в ресурсах разрабатывать крупные и сложные по логике сайты. Используя HL мы можем выиграть время и снять нагрузку на сервер.

Удобство для пользователя

Давайте теперь рассмотрим ещё один немаловажный критерий в разработке сайта, а именно удобство для управления данными.

Всем пожалуй не секрет, что сейчас всё больше компаний в России мигрируют на Битрикс именно из-за удобства админки. Особенно посмотрите как гибко и комфортно вы можете настроить интерфейс в инфоблоках. Вы можете удалять, добавлять, редактировать табы у детальных элементов. Удобный интерфейс для управления свойствами и полями. Так же без лишних проблем можете работать с редактированием секций ИБ. И многое многое многое...

Вот только как дело касается HL блоков, то тут у большинства пользователь сразу возникает ступор. А всё потому что HL блоки используют UF поля, с которыми работать, с точки зрения пользователя, не так удобно и привычно.

Собственно даже сейчас, когда менеджеры со стороны клиента имеют несколько бесплатных Битрикс сертификатов, возникают серьёзные споры по поводу ГДЕ ХРАНИТЬ НАШИ ДАННЫЕ!!!!

Я как разработчик вижу, что тот или иной функционал необходимо реализовывать именно на HL, чтобы избежать дальнейших проблем. Но клиент начинает тянуть одеяло проекта на свою сторону и упорно твердить, что делайте нам на ИБ, а то с HL у нас ни кто работать не умеет.

В такие моменты я вам могу предложить следующее. Не надо делать совершенно всё на HL блоках, так как они предназначены только для высоких нагрузок. По сути обычный каталог или раздел новостей можно, и нужно, сделать на обычном информационном блоке. А вот уже различные объёмные списке необходимо реализовывать на HL блоках. В таком случае все будут довольны.

Итог

Сейчас я не буду говорить кто лучше из этих двух ребят, по той причине, что каждый из них заточен под свою работу. Да. Инфоблоки очень нагружают базу и постоянно тянут при получении данных много чего лишнего. Но зато с ними очень удобно работать и в битриксе ОЧЕНЬ много штатных компонентов именно для работы с ними. Ваш клиент может не запариваться по поводу создания нового раздела новостей. Он просто создаст новую страницу, в визуальном редакторе кинет компонент news и выберет необходимый шаблон и ИБ. Всё, с HL блоками такое, к сожалению, сделать пока что нельзя.

Но зато highload-блоки рассчитаны под большие объёмы данных, опять же для примера, список всех моделей автомобилей которые можно отремонтировать в автосервисе вашего клиента. Данная информация, зачастую, приходит из 1С и не правится администраторами сайта. Так что эти данные мы должны хранить в HL, чтобы уменьшить нагрузку на БД и на сервер в целом.

Так что я рекомендую Битрикс разработчикам смело переходить на работу с HL блоками. Особенно учитывая, что данный функционал CMS активно развивается и дорабатывается!

Хотелось бы узнать ваше мнение по поводу HL блоков, так что оставляйте свои комментарии и делитесь этой статьёй в соц. сетях. И ещё не забывайте про нашу группу в ВК!


it-blog.club 1179
Автор: Ярослав Хмель


Если Вам понравилась статья, то можете поддержать блог переведя N сумму на кофе авторам или оплату хостинга!
В любом случае спасибо! А так же не забывайте про группу в ВК
ПОИСК ПО САЙТУ
Поддержать