variable_get() и производительность

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

Комментарии

Аватар пользователя graker graker 20 августа 2010 в 18:07

Насколько я помню, он все переменные заранее одним махом читает, а потом каждый v_get - это просто возврат элемента из массива global $conf.

Аватар пользователя vgoodvin vgoodvin 20 августа 2010 в 20:05

Можно некоторые переменные не хранить в базе, а указать в settings.php в массиве $conf. Они будут видны из variable_get();

Аватар пользователя Dеmimurych Dеmimurych 20 августа 2010 в 22:26

вариэбл гет, не приводит к генерации запросов.
инициализация глобального 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;
}
?>

сразу видно, что в лююбом случае генерируется только ОДИН запрос.

в случае елси есть кеш то к кешу за упакованным блобом. В случае если кеша нет, то к таблице вариэбл.
И опять же одним запросом выбираются все записи.

как в первом так и во втором случае скорость выполнения запроса тысячными секунды.