Drupal → Производительность node_load() vs. node_load_multiple()

16.12.2014

К своему стыду только сегодня узнал об отличии node_load() от node_load_multiple(). Раньше всегда думал, что node_load() это просто короткая запись reset(node_load_multiple(array($nid))), а внутри всё работает идентично, как оказалось это не совсем так.

node_load_multiple() загружает все ноды одним запросом, плюс ещё парой запросов загружает все метаданные — поля, статистика комментов, автора нод, и т.д.

node_load() же делает по запросу на каждую ноду, плюс столько же запросов на получение метаданных.

Итого при загрузке 100 нод имеем:

Время выполнения теста Число всех SQL запросов
с пустым cache_field
node_load() 560 ms 954
node_load_multiple() 230 ms 270
с прогретым cache_field
node_load() 160 ms 407
node_load_multiple() 15 ms 38

Разница в 10 раз при прогретом кэше!

Всё сказанное актуально и для других *_load()/*_load_multiple() функций.

Пойду делать ревизию своих модулей и тестов =)

Исходники тестов: node_load(), node_load_multiple().

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Что Вы понимаете под "при прогретом кэше!"

Добавить комментарий