Нубовский вопрос про работу кэшей

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

Аватар пользователя nitskel nitskel 15 августа 2014 в 13:38

Сначала вопрос. Все ли друпаловские функции берут данные из кэша? Конкретно по функциям ничего не нашел.

Например.
Как я понял, чтобы получить только имя термина, то

$term = taxonomy_term_load(1);
print $term->name;

сработает быстрее чем чистый запрос

$name = db_select('taxonomy_term_data', 't')
            ->fields('t', array('name'))
            ->condition('t.tid', 1)
            ->execute()
            ->fetchField();
print $name;

Также ли это справедливо, если использовать node_lode() только для получения одного дополнительного поля?

Еще очень интересует user_load(), profile_load_profile(), profile2_load_multiple() и тд все что связано с юзерами и профилями.

Комментарии

Аватар пользователя drupby drupby 15 августа 2014 в 17:12

если создать корне друпала файл test.php и туда разместить элементарный тест

<?php
define('DRUPAL_ROOT', getcwd());

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

timer_start('test1');
node_load(1);
$time1 = timer_read('test1');
timer_stop('test1');

timer_start('test2');
node_load(1);
$time2 = timer_read('test2');
timer_stop('test2');

timer_start('test3');
node_load(1);
$time3 = timer_read('test3');
timer_stop('test3');

print $time1 . '<br />' . $time2 . '<br />' . $time3;

и в браузере запустить этот файл site.ru/test.php, то можно сделать определенные выводы

можно же посмотреть стек вызовов для node_load
1- https://api.drupal.org/api/drupal/modules%21node%21node.module/function/...
2- https://api.drupal.org/api/drupal/modules%21node%21node.module/function/...
3- https://api.drupal.org/api/drupal/includes%21common.inc/function/entity_...
4- https://api.drupal.org/api/drupal/includes%21entity.inc/function/DrupalD...

то же самое и для остальных сущностей

Аватар пользователя nitskel nitskel 16 августа 2014 в 23:28

Ого, спасибо, всем.
Провел тесты с именем термина. Запрос победил.

term_load=> 3.59
запрос => 0.31

Меня собственно смутил комментарий xandeadx'а в одной его статье. Он там сказал, что term_load вообще не делает запроса.

dashiwa, спасибо за труд. Перед тем как писать сюда пост, я прочитал ту статью и понял, что и при кэшировании делается запрос к базе. Но опять же коммент xandeadx'а не давал мне покоя.

drupby, спасибо, полезный скриптик.

Аватар пользователя imarat imarat 17 августа 2014 в 20:05

"nitskel" wrote:
Меня собственно смутил комментарий xandeadx'а в одной его статье. Он там сказал, что term_load вообще не делает запроса.

на странице термина не делает
ноде лоад тоже не делает на странице ноды

Аватар пользователя nitskel nitskel 17 августа 2014 в 20:46

Ну на странице ноды доступна переменная $node.
Про термин тоже разобрался, там он уже в оперативной памяти.