volocuga@drupal.org 20 августа 2010 в 17:57 Скажите, каждый раз когда вызывается variable_get() идёт отдельный запрос в БД, или Друпал их как то объединяет? Drupal6 Блог Войдите или зарегистрируйтесь, чтобы отправлять комментарии
graker 20 августа 2010 в 18:07 Насколько я помню, он все переменные заранее одним махом читает, а потом каждый v_get - это просто возврат элемента из массива global $conf.
xxandeadxx 20 августа 2010 в 18:47 http://api.drupal.ru/api/function/variable_get/6 3 строчки кода, разобраться не сложно)
vgoodvin 20 августа 2010 в 20:05 Можно некоторые переменные не хранить в базе, а указать в settings.php в массиве $conf. Они будут видны из variable_get();
Dеmimurych 20 августа 2010 в 22:26 вариэбл гет, не приводит к генерации запросов. инициализация глобального conf выполняется в bootstrap функция variable_init. посмотрев которую <?phpfunction variable_init($conf = array()) { // NOTE: caching the variables improves performance by 20% when serving cached pages. if ($cached = cache_get('variables', 'cache')) { $variables = unserialize($cached->data); } else { $result = db_query('SELECT * FROM {variable}'); while ($variable = db_fetch_object($result)) { $variables[$variable->name] = unserialize($variable->value); } cache_set('variables', 'cache', serialize($variables)); } foreach ($conf as $name => $value) { $variables[$name] = $value; } return $variables;}?> сразу видно, что в лююбом случае генерируется только ОДИН запрос. в случае елси есть кеш то к кешу за упакованным блобом. В случае если кеша нет, то к таблице вариэбл. И опять же одним запросом выбираются все записи. как в первом так и во втором случае скорость выполнения запроса тысячными секунды.
Комментарии
Насколько я помню, он все переменные заранее одним махом читает, а потом каждый v_get - это просто возврат элемента из массива global $conf.
Ок, обнадёжило
http://api.drupal.ru/api/function/variable_get/6 3 строчки кода, разобраться не сложно)
Можно некоторые переменные не хранить в базе, а указать в settings.php в массиве $conf. Они будут видны из variable_get();
вариэбл гет, не приводит к генерации запросов.
инициализация глобального conf выполняется в bootstrap
функция variable_init.
посмотрев которую
<?php
function variable_init($conf = array()) {
// NOTE: caching the variables improves performance by 20% when serving cached pages.
if ($cached = cache_get('variables', 'cache')) {
$variables = unserialize($cached->data);
}
else {
$result = db_query('SELECT * FROM {variable}');
while ($variable = db_fetch_object($result)) {
$variables[$variable->name] = unserialize($variable->value);
}
cache_set('variables', 'cache', serialize($variables));
}
foreach (
$conf as $name => $value) {$variables[$name] = $value;
}
return
$variables;}
?>
сразу видно, что в лююбом случае генерируется только ОДИН запрос.
в случае елси есть кеш то к кешу за упакованным блобом. В случае если кеша нет, то к таблице вариэбл.
И опять же одним запросом выбираются все записи.
как в первом так и во втором случае скорость выполнения запроса тысячными секунды.