Views VS Сниппеты в Drupal 7

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

Аватар пользователя Sadchenko Sadchenko 20 декабря 2012 в 4:19

Существует мнение, что Views на Drupal 7 сильно грузит систему, особенно если на главной странице сразу 4-5 вьюшек. Я и сам с подобным сталкиваюсь. Устанавливаю чистый D7 (minimal) загружается все моментально

Только подключаю вьюшки, время загрузки увеличивается сразу в несоклько раз. Иногда даже раз в 10 дольше ждать приходится причем не только у меня и не только на моем компе. Отключаю вьюшки, отключаю модуль, удаляю все его компоненты и записи из базы, опять двиг летает.
Хотел попробовать сниппетами повыводить, но нигде не нашел хорошей инструкции для D7 (находил только для D5 и D6), никогда с ними не работал. Может кто подскажет направление в котором шагать, как в шаблонах типа block--block--1.tpl.php обходиться без Views? (Например вывести в этом блоке 10 материалов типа "page" вместе с необходимыми полями)

Комментарии

Аватар пользователя sg85 sg85 20 декабря 2012 в 5:55

"Sadchenko" wrote:
Существует мнение, что Views на Drupal 7 сильно грузит систему, особенно если на главной странице сразу 4-5 вьюшек. Я и сам с подобным сталкиваюсь. Устанавливаю чистый D7 (minimal) загружается все моментально

Вы думаете, что в этом виноват вьювс?

Можете провести небольшой бенчмарк, ставите devel, смотрите на его показатели(память, SQL, время генерации страницы) со вьювс, потом со снипетом, потом со своим модулем, будете весьма удивлены.

Вот вариант снипета, 10 материалов в виде тизеров для опубликованных нод типа page:
<?php
//Ищем 10 сущностей нод
$query = new EntityFieldQuery();
$result = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'page')
->propertyCondition('status', 1)
->range(0, 10)->execute();
//Если что-то нашлось:
if (isset($result['node'])) {
//Загружаем сущности нод
$nodes = entity_load('node', array_keys($result['node']));

//Выводим, как нам нравится, например, в виде тизеров
print drupal_render(node_view_multiple($nodes));
}
?>

Аватар пользователя Sadchenko Sadchenko 23 января 2013 в 14:39

sg85 wrote:

Вот вариант снипета, 10 материалов в виде тизеров для опубликованных нод типа page:

Интересно, можно ли к этому снипету прикрепить постраничную навигацию? Или каким нибудь другим способом сделать навигацию не прибегая к views?

Аватар пользователя NaZg NaZg 20 декабря 2012 в 11:28

"Sadchenko" wrote:
Может кто подскажет направление в котором шагать, как в шаблонах типа block--block--1.tpl.php обходиться без Views?

http://habrahabr.ru/post/135894/

А вообще оптимизируйте вьюхи, например, включив там кеширование

Аватар пользователя Sadchenko Sadchenko 20 декабря 2012 в 16:25

"NaZg" wrote:
http://habrahabr.ru/post/135894/[/quote]
Это я так понял для шестерки урок, разве на семерку покатит?

"NaZg" wrote:
А вообще оптимизируйте вьюхи, например, включив там кеширование

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

"sg85" wrote:
Можете провести небольшой бенчмарк

Спасибо, попробую.
Кстати Ваш код, именно то, что я искал, отдельное спасибо за него.

Аватар пользователя NaZg NaZg 20 декабря 2012 в 16:39

"Sadchenko" wrote:
Это я так понял для шестерки урок, разве на семерку покатит?

Немного поправить в соответствии с API. Общий принцип показан.

Аватар пользователя gorr gorr 20 декабря 2012 в 18:32

"Sadchenko" wrote:
Возможно я немного неправильно понимаю его работу. Если его включу то Views при заходе нового посетителя,уже не будет обращаться к базе и вытаскивать там нужные поля? или будет, а только потом будет их кешировать.
Дело в том что сайт одностраничный и если кеширование происходит только когда человек заходит первый раз на сайт, то оно бессмысленно.

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

Аватар пользователя sas@drupal.org sas@drupal.org 20 декабря 2012 в 21:59

Views обоснован на несложных выборках как у ТС + кеш блоков для анонимов при большой посещении кул, но не панацея, а часто и проблема для мало мальски более сложных запросах.

Аватар пользователя sg85 sg85 20 декабря 2012 в 23:20

несколько простых истин:
1 да, вьювс жрет память, но не так много, как кажется, принципиально только если хостинг выдает 32 метра лимита памяти PHP и менять его не вариант.
2 вьювс работает на несколько мс медленнее чем свой модуль(разницу заметить сложно)
3 сниппет, созданый как PHP содержимое блока\ноды выполняется через eval, что приводит к ряду неприятных последствий(синтаксическая ошибка способна положить весь сайт, код выполняется очень медленно, к тому же, на сколько мне известно, не кешируется акселераторами и т.д.), на дешевых хостингах обработка таких сниппетов может измеряться вообще в секундах.
4 сниппет, созданный в шаблоне не кешируется вообще(если нет модуля boost, например, или еще какой либо реализации кеширования статики), а если сам запрос еще и медленный, то Ваш сайт станет очень уязвим для DDOS атак.
5 главным ручным тормозом является запрос к БД и не важно чем он вызван.
6 сниппеты в некоторых условиях способны значительно сократить время разработки.
7 вьювс легче большинства модулей ядра.
8 вьювс ускоряет разработку, масштабируем и т.д. и т.п.

Аватар пользователя sas@drupal.org sas@drupal.org 21 декабря 2012 в 11:03

Самый большой недостаток views - это отсутствие поддержки связанных с содержимым отбираемого в фильтрах ( в них должны попадать значения из контента который отбирается а не все возможное, так же при формировании фильтров должны учитываться уже установленные поля фильтра ) зависимы фильтры - не реализованы и хотя есть contrib пытающиеся реализовать это для views - они не решают задачу.

Аватар пользователя Crea Crea 21 декабря 2012 в 15:00

<a href="mailto:sas@drupal.org">sas@drupal.org</a> wrote:
"Crea" wrote:
Это не недостаток

Я уважаю Ваше мнение, но к достоинствам отсутствие этого функционала отнести не могу :)

А я не утверждаю, что это достоинство. Просто некорректно записывать в недостатки то, что не является базовым функционалом и что автор модуля не закладывал.
Это было бы недостатком, если Views был плохорасширяемым модулем, и на самом деле мешал реализовать эти функции.

Аватар пользователя sas@drupal.org sas@drupal.org 22 декабря 2012 в 17:30

"Crea" wrote:
реализовать эти функции

Реализация как расширение в views данной функции занимает больше времени чем в своем модуле, и я это говорю так как вопрос был не праздный и не теоретический и для views я писал расширения в тех случаях когда это было целесообразно, но не в этом случае ...