что быстрее просто страницы с 5-6 блоками или panels?

Главные вкладки

Аватар пользователя gumk gumk 12 июня 2012 в 13:10

Разрабатываю проект, который подрузомевает что восновном будут зарегистрированные посетители. Встает вопрос с нагрузкой почти на всех страницах есть по 5-7 блоков, часть из которых можно заменить выполняя загрузку views в tpl фалах.
встречал мнение что panels ускоряет загрузку блоков

Комментарии

Аватар пользователя Orion76 Orion76 12 июня 2012 в 13:25

Ну.. грубо говоря, что панели что блоки что шаблоны предназначены для позиционирования вывода инфы на странице..
А вот как и откуда эта инфа собирается и рендериться для вывода - тут наверное уже есть варианты по скорости..
Или эта инфа динамичная и для ее сбора необходимо выполнять десятки запросов к БД..
Или инфа относительно статична в течении некоторого периода времени - и ее можно кешировать и грузить из кеша, время-от-времени его обновляя..

Аватар пользователя gumk gumk 12 июня 2012 в 19:52

"orion76" wrote:

Ну.. грубо говоря, что панели что блоки что шаблоны предназначены для позиционирования вывода инфы на странице..
А вот как и откуда эта инфа собирается и рендериться для вывода - тут наверное уже есть варианты по скорости..
Или эта инфа динамичная и для ее сбора необходимо выполнять десятки запросов к БД..
Или инфа относительно статична в течении некоторого периода времени - и ее можно кешировать и грузить из кеша, время-от-времени его обновляя..


Это понятно, где-то читал что если просто блоки - то они сначала грузится массив с информацией о всех блоках а потом фильтруются для определенной страницы. У панелей же грузится информация о странице и подгружаются определенные блоки.
Плюс еще вопрос при каком варианте можно настроить кеширование блоков наиболее гибко. Панели поддерживают cache_actions + встроенные возможности панелей.

Аватар пользователя MainVisor MainVisor 12 июня 2012 в 21:28

У меня views блоки выводятся по условию. Например, если открыта страница forum*, то выводятся определенные views блоки по бокам. Если открыта страница history*, то отображаются другие блоки. И так с music*, blog*, gallery* и ещё 10...
Есть один проект, так там под 30 views блоков и нормально. Cache block enabled.

Через panels не пробовал, так как мне нравится произвольное расположение блоков. Тем более, если в будущем придется переводить работающие проекты на Drupal 8, то лучше использовать минимум модулей.

Вопрос интересен. Подпишусь.

Аватар пользователя MainVisor MainVisor 12 июня 2012 в 21:33

gumk, и всё же мне кажется, что если условие не выполняется для вывода блока, то он (блок) не обращается к базе данных и т.п...

Аватар пользователя gumk gumk 12 июня 2012 в 21:39

сам блок не обращается, но все блоки проверяются на принадлежность к данной странице, плюс если кто-то вдруг не задал четкого расположения блока, то он делает запрос но пустой не выводится.
а вот кеширование по условию мне кажтеся лучше, например кеш блока, содержащего последние новости обновлять только при изменении, удалении, добавлении новой новости. Для блоков интересно есть такое решение?

Аватар пользователя Orion76 Orion76 12 июня 2012 в 22:08

"MainVisor" wrote:
то он (блок) не обращается к базе данных и т.п

Так и есть... содержимое блоков генерируется только для необходимых блоков..

Кстати... для настройки вывода контента есть еще мощный модуль Display Suite..
Позволяет определять специальные шаблоны для отображения материалов..
Есть готовые многоколоночные шаблоны, но можно определить и свои.
Добавлять к материалам "виртуальные" поля, например вывод вьюса(в настройках отображения полей типа материала).. и многое многое другое...

Аватар пользователя MainVisor MainVisor 12 июня 2012 в 22:11

Спасибо, это просто отлично, что инвизибл блок не исполняет запрос к базе...

Где-то читал про Display Suite, но наверное стоит протестировать

Аватар пользователя petrovnn petrovnn 11 сентября 2012 в 5:23

в друпале 6 было так: чем больше регионов и блоков в них - тем сильней тормоза. В семерке этой закономерности не прослеживаю, но все равно думаю что быстрее будут шаблоны + views блоки.

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

А вывести блок вьюхи в шаблоне просто:

$block = module_invoke('views', 'block_view', '3c90e9fbe80c81c7f575986e5fbe3094');
print render($block);

длинная строка это походу ID вьюхи, он может быть и человеко-понятным, зависит от суммарной длины системного названия вьюхи и его представления