Аватар пользователя B.X

Curae leves loqunter...

Curae leves loqunter, ungentes stupent. — Только малая печаль говорит, большая — безмолвна.

Top.Mail.Ru Каталог webplus.info Яндекс.Метрика

Пользователей онлайн: 0.

«Они считали чувство вины ошибкой, а угрызения совести — слабостью. Они всегда были практичны и никогда — сентиментальны. Но дружба их не имела границ.»

Уменьшение запросов к БД в path.inc (4.7) | [Харзах]-[РУ]

Аватар пользователя jason32

чё тут думать - лезть в код и править
файл path.inc
Вместо

<?php
function drupal_init_path() {
  if (!empty(
$_GET['q'])) {
    
$_GET['q'] = drupal_get_normal_path(trim($_GET['q'], '/'));
  }
  else {
    
$_GET['q'] = drupal_get_normal_path(variable_get('site_frontpage''node'));
  }
}
?>

ставить

<?php
function drupal_init_path() {
global 
$map_alias;
  
$c=count($map_alias);
if (empty(
$c))
{
$sql "Select src,dst FROM {url_alias} ";
$res=db_query($sql);
    while( 
$row=db_fetch_array($res))
    {
    
$map_alias[$row['src']]=$row['dst'];
  }
  }
  if (!empty(
$_GET['q'])) {
    
$_GET['q'] = drupal_get_normal_path(trim($_GET['q'], '/'));
  }
  else {
    
$_GET['q'] = drupal_get_normal_path(variable_get('site_frontpage''node'));
  }
}
?>

вместо

<?php
function drupal_lookup_path($action$path '') {
  static 
$map = array();
  static 
$count NULL;
  if (
$count === NULL) {
    
$count db_result(db_query('SELECT COUNT(pid) FROM {url_alias}'));
  }
  if (
$action == 'wipe') {
    
$map = array();
  }
  elseif (
$count && $path != '') {
    if (
$action == 'alias') {
      if (isset(
$map[$path])) {
        return 
$map[$path];
      }
      if (
$alias db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s'"$path))) {
        
$map[$path] = $alias;
        return 
$alias;
      }
      else {
        
$map[$path] = $path;
      }
    }
    elseif (
$action == 'source') {
      if (
$alias array_search($path$map)) {
        return 
$alias;
      }
      if (!isset(
$map[$path])) {
        if (
$src db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s'"$path))) {
          
$map[$src] = $path;
          return 
$src;
        }
      }
    }
  }
  return 
FALSE;
}
?>

ставим

<?php
function drupal_lookup_path($action$path '') {
global 
$map_alias;
  static 
$map = array();
  if (
$action == 'wipe') {
    
$map = array();
  }
  elseif (
$path != '') {
    if (
$action == 'alias') {
      if (!isset(
$map_alias[$path])) $map_alias[$path]=$path;
      return  
$map_alias[$path];
    }
    elseif (
$action == 'source') {
      if (
is_array($map_alias) and $alias array_search($path$map_alias)) {
        return 
$alias;
      }
      else  return 
False;
    }
  }
  return 
FALSE;
}
?>

В итоге получаем один запрос к базе вместо 60-70.

Аватар пользователя B.X

хм... на самом деле, быстрее заработало...
прямо скачет...
спасибо за хак...

Аватар пользователя Гость

пробовал на версии 4.7.3 и 4.7.4 - поначалу действительно залетало, а потом тупо грузиться перестало.

а у вас что за версии?

Аватар пользователя B.X

у меня 4.7.0 с патчами, наверное поэтому и работает, в версиях 4.7.3 и 4.7.4 достаточно много изменений, а вообше лучше уже наверное 5-ю версию ставить, там и без патчей всё хорошо работает...

Аватар пользователя Гость

А как с пятеркой быть?

Аватар пользователя Гость

Сам же и отвечу на свой вопрос — с пятеркой быть очень неплохо =) Попробовал, опять таки — визуально стало все гораздо веселее =)

Аватар пользователя B.X

...документ 901 - здесь для пятёрки от того же автора...
посмотрите раздел Настройка Друпала, там есть ещё интересные решения...