You are hereФорумы / Технические вопросы / Веб-строительство / CMS - системы управления сайтом / Drupal / Ускоряем друпал в 60-70 раз О_о
Ускоряем друпал в 60-70 раз О_о
Уменьшение запросов к БД в path.inc
лезть в код и править
файл 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 > 0 && $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
Хакер : а на друпале 5-тых версий работает данное решение? Если работает на 5тых, то работает ли на 6-тых?
и на пятых и на шестых, вообще код для четвертой и пятой, но я воткнул в свою дру6.4 и разницу сразу же заметил.
Спасик, Хаке, сегодня вечером буду пробовать! :)
Ацца в ратан! Работает! Просто МЕГА скорость загрузки страниц! Ну кроме картинок, конечно. Но, блин, это СТОИТ того! Спасибо еще раз ХАК!
Спасибо тому кто додумался =) я сам вчера не мог нарадоваться скорости загрузки :) Помоему сравнимо с аггресивным кешированием. В общем cool =))
Хороший кусок кода, надо его на д.орг закинуть, пусть пропатчат уже официально! На своём сайте поставил, косяков не обнаружил.
Цитата:
Опубликовано neochief в вт, 09/09/2008 - 08:00.
Думаю, с увеличением количества алиасов на сайте, могут возникнуть проблемы с оперативой. В среднем, таблица алиасов для 100К записей (80К нод, 10К юзеров) занимает 12 Мб, а этот патч грузит ее всю в оперативу для каждого конекшена. Поэтому и на друпал.орг'е не спешили бы этот патч применять.
Тоже так сделал. Спасибо. Действительно шустрее начал работать :).
Спасибо! Пошустрее стало.
Кхм, это действительно сделает друпал шустрее в... 60 раз? Что-то не верится. Отпишитесь кто уже пробовал и насколько он стал шустрее работать.
---
цена контекстная реклама
Смотри комменты выше
А почему разработчики этот патч не включат? Или он что то ломает?
>> А почему разработчики этот патч не включат? Или он что то ломает?
Например потому что
таблица урл элиас у меня 21 мегабайт.
Выполнения кода, предложенного автором, сразу же отгрызет почти 25 мегабайт памяти. При условии что у вас на скрипт выделяется 32, сайт тут же станет раком.
Иначе говоря, данный хак можно использовать только в случаях, когда таблица урл алиас маленькая.
попробовал данный патч. до поры до времени все работало, пока не бд алиасов не превысил размер в 32 мб, после этого сайт встал, пришлось откатить path.inc.
Супер скрипт вообще.
Таблица алиасов у меня большой не будет, т.к. сайт статичный и ограничен количеством страниц примерно в 40-50.
Памяти есть 96М =)
Так что всё работает отично, спасибо.
Еще по теме ускорения:
http://habrahabr.ru/blogs/drupal/107094/
(Работа с системным окружением)
На 6.19 существенного ускорения не заметил, хотя и переписал его специально для 6.19 (так как ТС не учитывает language).
Так же использовал не только $map_alias, но и $map_alias_reverse.
Хотя, у меня еще path_auto включен ..
Поделитесь своим решением:)
крутая штука для небольших сайтов!
И не только
Отправить комментарий