Views, производительность, оптимальное построение.

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

Аватар пользователя Sora_tm Sora_tm 28 октября 2013 в 18:17

Добрый день!

Возник вопрос, есть ли общие темы по тому, как стоит или не стоит строить запросы во views дабы достичь максимальной производительности?

Например, у меня есть несколько типов материалов, но я знаю, что привязка к словарю таксономии есть только в одном из них.
Есть ли смысл в фильтрах ставить тип материала, или только создать фильтр на проверку наличия термина?

Ну и прочие такие вопросы...

Комментарии

Аватар пользователя Sora_tm Sora_tm 29 октября 2013 в 9:48

multpix wrote:
"Sora_tm" wrote:
Ну и прочие такие вопросы...

тогда как-то так, для начала:
https://www.google.com/search?q=профилирование+drupal

Спасибо большое за наводку, не знал про XHProf. У меня сейчас просто проблема на сайте с превышением у хостера MySQL Bandwidth.

У меня XHProf рисует такой график, http://itmages.ru/image/view/1294413/6252e737
не подскажите, куда копать? Сильно ли все плохо? (это главная страница)

Аватар пользователя Sora_tm Sora_tm 29 октября 2013 в 12:47

q2_faith wrote:
"Sora_tm" wrote:
У меня XHProf рисует такой график, http://itmages.ru/image/view/1294413/6252e737
не подскажите, куда копать? Сильно ли все плохо? (это главная страница)

а вы с юмором)

В смысле? Не понять по графику?

Аватар пользователя multpix multpix 29 октября 2013 в 19:08

"Sora_tm" wrote:
Не понять

зысыз намбвас нипанять....

гляжу - найден и осваивается инструментарий по профилировке,
значит понимание - что происходит растет.

так-же, банально советую применять дефолтный хромовский инструмент для вебмастеров: Shift Ctrl i на интересующей странице.

незачем бегать с кардиограммами по площади,
тут или лечиться, или лечить.

Аватар пользователя sg85 sg85 29 октября 2013 в 21:33

"q2_faith" wrote:
включаете показ времени выполнения запроса и смотрите

при малых объемах данных может не сработать, т.к. "кривые" запросы обычно проявляют свою кривизну именно с ростом числа записей в БД, некоторые при 100 записей отрабатывают несколько секунд, а другие и при миллиардах выполняются за пару миллисекунд, но проблема в том, что при 10 записях работать они будут одинаково, как вариант - сгенерировать много много всякого с помощью того же devel и потом уже смотреть, что получится.

"Sora_tm" wrote:
Есть ли смысл в фильтрах ставить тип материала, или только создать фильтр на проверку наличия термина?

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

"Sora_tm" wrote:
У меня сейчас просто проблема на сайте с превышением у хостера MySQL Bandwidth.

Это главная проблема друпала в целом.

Аватар пользователя Sora_tm Sora_tm 30 октября 2013 в 11:17

q2_faith wrote:
"Sora_tm" wrote:
В смысле? Не понять по графику?

не наглядно. в виде таблицы удобнее смотреть.

http://gazeta-petrozavodsk.ru/xhprof/index.php?run=5270b1b202c03&source=...

Буду рад любым замечаниям.
П.С. Хостинг патруль.

Аватар пользователя Sora_tm Sora_tm 30 октября 2013 в 12:01

q2_faith wrote:
"Sora_tm" wrote:
Буду рад любым замечаниям.

а сколько у вас модулей установлено?

Вот список модулей, всего 50

content
filefield
imagefield
nodereference
nodereference_url
number
optionwidgets
relevant_content_cck
text
blog
book
locale
menu
path
php
poll
taxonomy
trigger
update
upload
block
filter
node
system
user
devel
image
image_attach
imageapi
imageapi_gd
imagecache
imagecache_ui
scroll_to_top
captcha
wysiwyg
views_litepager
views
views_rss
views_ui
fivestar
votingapi
arcal
disqus
insert
lightbox2
pathauto
relevant_content
token
tvi
yandexnews

Аватар пользователя Sora_tm Sora_tm 30 октября 2013 в 13:24

q2_faith wrote:
"Sora_tm" wrote:
php

активно используется?

Нет, только для блока с рекламой SAPE.
Пробовал отключать его (модуль PHP) ситуация не менялась.

Аватар пользователя Sora_tm Sora_tm 30 октября 2013 в 14:07

q2_faith wrote:
"Sora_tm" wrote:

а что у вас там за count'ы?
всю ленту новостей не стоит на главной выводить, имхо

Честно говоря не пойму откуда берутся count, в Вьювсе такой запрос

SELECT node.nid AS nid, node.created AS node_created, node_data_field_annotation.field_annotation_value AS node_data_field_annotation_field_annotation_value, node_data_field_annotation.field_annotation_format AS node_data_field_annotation_field_annotation_format, node.type AS node_type, node.vid AS node_vid FROM node node LEFT JOIN content_type_news node_data_field_annotation ON node.vid = node_data_field_annotation.vid WHERE (node.vid IN ( SELECT tn.vid FROM term_node tn WHERE tn.tid = 52 )) AND (node.type in ('news')) ORDER BY node_created DESC

Аватар пользователя q2_faith q2_faith 30 октября 2013 в 14:14

"Sora_tm" wrote:
Честно говоря не пойму откуда берутся count, в Вьювсе такой запрос

это пэйджер скорее всего считает. отключите его и посмотрите скорость загрузки страницы

Аватар пользователя Sora_tm Sora_tm 30 октября 2013 в 15:31

q2_faith wrote:
"Sora_tm" wrote:
Честно говоря не пойму откуда берутся count, в Вьювсе такой запрос

это пэйджер скорее всего считает. отключите его и посмотрите скорость загрузки страницы

Отключил пэйджер, все равно запрос остался.

SELECT COUNT(*) FROM (SELECT node.nid AS nid FROM node node LEFT JOIN content_type_news node_data_field_annotation ON node.vid = node_data_field_annotation.vid WHERE (node.vid IN ( SELECT tn.vid FROM term_node tn WHERE tn.tid = 52 )) AND (node.type in ('news')) ) count_alias

Скорость загрузки и кол-во запросов не поменялось особо.

Аватар пользователя q2_faith q2_faith 30 октября 2013 в 17:58

"Sora_tm" wrote:
Напрягает огромное количество taxonomy_node_get_terms

меня тоже. найдите где они в таком количестве вызываются

Аватар пользователя Sora_tm Sora_tm 31 октября 2013 в 0:48

q2_faith wrote:
"Sora_tm" wrote:
Напрягает огромное количество taxonomy_node_get_terms

меня тоже. найдите где они в таком количестве вызываются

Все что я понял, так это то, что выводятся taxonomy_node_get_terms связянные с материалами на вьювсах, т.е. на главной лента новостей, я сравнил, все taxonomy_node_get_terms связаны с материалами в этой ленте. И не только, на странице помимо ленты есть еще вьювсы и также вызывается taxonomy_node_get_terms.

Аватар пользователя Sora_tm Sora_tm 31 октября 2013 в 9:25

sg85 wrote:
у Вас там вьюха с выводом в виде сущностей?

Возможно не так понял, но у меня в представлениях стоит "Стиль строки: Поля" а не "материал"

Аватар пользователя Sora_tm Sora_tm 31 октября 2013 в 9:23

Похоже начал догонять, когда переключил на другую тему, все эти документы появились, так понимаю из-за галочки "Отображать на главной", но я не понимаю, в моей теме создан page-front.tpl.php где я определил свою области блоков, и вывожу в них вьювсы. Откуда появляются тогда эти taxonomy_node_get_terms? Получаются откуда то лезут...

Аватар пользователя Sora_tm Sora_tm 31 октября 2013 в 9:36

Sora_tm wrote:
Похоже начал догонять, когда переключил на другую тему, все эти документы появились, так понимаю из-за галочки "Отображать на главной", но я не понимаю, в моей теме создан page-front.tpl.php где я определил свою области блоков, и вывожу в них вьювсы. Откуда появляются тогда эти taxonomy_node_get_terms? Получаются откуда то лезут...

Не может ли быть это связано с кривой темой? Куда копать не знаю.

Аватар пользователя sg85 sg85 31 октября 2013 в 9:29

taxonomy_node_get_terms вызывается при загрузке ноды с терминами. Соль в том, что хоть и кажется, что это работает медленно, но, если попытаться получить список терминов у всех нод разом единым запросом, то практически любой сервер склеит ласты даже при небольшом числе нод и терминов, а так, 100 нод на странице = 100 вызовов taxonomy_node_get_terms, причем в этом случае совершенно неважно, сколько вообще записей в БД.

Аватар пользователя sg85 sg85 31 октября 2013 в 9:40

"Sora_tm" wrote:
Не может ли быть это связано с кривой темой? Куда копать не знаю.

вполне, в файлы шаблонов можно напихать чего угодно, в прочем, как и в template.php, если тему делал кто-то странный, то в каком-нибудь шаблоне вполне можно будет обнаружить что-то вроде node_load

Аватар пользователя q2_faith q2_faith 31 октября 2013 в 12:49

"Sora_tm" wrote:

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

Аватар пользователя Sora_tm Sora_tm 31 октября 2013 в 14:46

q2_faith wrote:
"Sora_tm" wrote:

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

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

Аватар пользователя q2_faith q2_faith 31 октября 2013 в 20:11

"Sora_tm" wrote:
А пейджер с 1500 новостями не моя прихоть, а редактора сайта и руководства, им так легче смотреть старые материалы. Если подскажите более здравое решение как листать и искать старые новости буду очень благодарен.

сделайте им отдельную страницу. а на главной выведите 8 новостей и внизу ссылку на все новости