Перейти к публикации

Как прикрутить кеширование к модулю Топ авторов 2.2?


Рекомендованные сообщения

Приветствую!

Собственно сабж. Нужно прикрутить кеширование к модулю Топ авторов 2.2 ( http://4dle.ru/mods/page,1,2,1147156132-top-avtorov-2.2.html ).

Мод простой, но если в базе 100 000 пользаков то Core 2 Quad 2.4 ГГц практически ложится на сортировках и выборках. MySQL падает при посещаимости в 30 К в сутки

Ссылка на сообщение
Поделиться на других сайтах

glamusers.php

найти

$glamusers = dle_cache("glamusers", $config['skin']);
заменить на
$glamusers = dle_cache("glamusers", $config['skin']);

if (!$glamusers) 

{
найти
	$db->free();
заменить на
$db->free();

create_cache ("glamusers", $tpl->result['glamusers'], $config['skin']);

}
glamusers1.php найти
$glamusers1 = dle_cache("glamusers1", $config['skin']);
заменить на
$glamusers1 = dle_cache("glamusers1", $config['skin']);

if (!$glamusers1) 

{
найти
	$db->free();
заменить на
$db->free();

create_cache ("glamusers1", $tpl->result['glamusers1'], $config['skin']);

}
в index.php Вместо
	$tpl->set('{topusers}', $tpl->result['glamusers']);

	$tpl->set('{topusers1}', $tpl->result['glamusers1']);
сделать
	$tpl->set('{topusers}', $glamusers);

	$tpl->set('{topusers1}', $glamusers1);

p.s.

не тестировал, так как этот мод не юзаю

Изменено пользователем spam
Ссылка на сообщение
Поделиться на других сайтах

2spam

Спасибо за помощь! Файл кеша в engine/cache/ но толку от него мало. Нагрузка после ваших модификаций такая же... В чем может быть причина?

Ссылка на сообщение
Поделиться на других сайтах

2 IT-Security:

Конечно! Достаточно отключить в init.php

$tpl->set('{topusers}', $glamusers);

$tpl->set('{topusers1}', $glamusers1);

и нагрузка стабилизируется до нормального показателя.

Ссылка на сообщение
Поделиться на других сайтах

Достаточно отключить в init.php

$tpl->set('{topusers}', $glamusers);

$tpl->set('{topusers1}', $glamusers1);

и нагрузка стабилизируется до нормального показателя.

Ерунда, как раз эти строки на нагрузку не влияют. :)

где то ты наверно ошибся при установке/изменении модуля.

Ссылка на сообщение
Поделиться на других сайтах

Дело в том что, я сливал эти два мода - добавил в glamusers1.php:

$sql = $db->query("SELECT user_id, name, foto, signature, news_num, comm_num, icq FROM ".PREFIX."_users order by news_num DESC LIMIT 0,$num");
*comm_num и после
$tpl->set('{news_num}', '<a href="/user/'.$row['name'].'/news/">'.$row['news_num'].'</a>');
добавил:
$tpl->set('{comm_num}', '<a href="/index.php?do=lastcomments&userid='.$row['user_id'].'">'.$row['comm_num'].'</a>');

потом в шабе модуля вывел {comm_num} и получил кол-во комментов... Этот запрос и создал нагрузку... Охото конечно слить эти два мода, чтоб в {topusers1} выводились самые активные авторы с их кол-вом комментариев.

Как быть?

Изменено пользователем teleport
Ссылка на сообщение
Поделиться на других сайтах

сделай как написал spam, включи отладку и в исходном коде посмотри сколько времени на что тратится.

Изменено пользователем romen
Ссылка на сообщение
Поделиться на других сайтах

еще после

$db->free();
добавь в glamusers.php
$glamusers = $tpl->result['glamusers'];
в glamusers1.php
$glamusers1 = $tpl->result['glamusers1'];
но у тебя косяк не в этом.
Дело в том что, я сливал эти два мода - добавил в glamusers1.php:

выложи сюда весь код

Ссылка на сообщение
Поделиться на других сайтах

на поле news_num в БД нет ключей и сортирка по этому полю крайне ресурсоемкое мероприятие

Ссылка на сообщение
Поделиться на других сайтах

2spam:

Код glamusers1.php

<?php

/*

=====================================================

 Топ комментаторов v2.1 by Glam

-----------------------------------------------------

 Copyright (c) 2008 Glam [472-472-998]

=====================================================

 Данный код защищен авторскими правами

=====================================================

 Файл: glamusers.php

-----------------------------------------------------

 Назначение: Топ комментаторов

=====================================================

*/

if(!defined('DATALIFEENGINE'))

{

  die("Hacking attempt!");

}


$num = "10"; // сколько пользователей выводим в блоке?


$glamusers1 = dle_cache("glamusers1", $config['skin']);

if (!$glamusers1) 

{

$sql = $db->query("SELECT user_id, name, foto, signature, news_num, comm_num, icq FROM ".PREFIX."_users order by news_num DESC LIMIT 0,$num");

while ($row = $db->get_row($sql)) {

if ($config['allow_alt_url'] == "yes") {

$userlink = "<a href=\"".$config['http_home_url']."user/".urlencode($row['name'])."/\">";

} else {

$userlink = "<a href=\"$PHP_SELF?subaction=userinfo&user=".urlencode($row['name'])."/\">";

}

if ($row['foto'] !== "")

$ava = "{$userlink}<img src=\"".$config['http_home_url']."uploads/fotos/".$row['foto']."\" align=\"center\" width=\"50\"></a>";

else

$ava = "{$userlink}<img src=\"{THEME}/images/noavatar.png\" align=\"center\" width=\"50\"></a>";

$nohtml = "'<[\/\!]*?[^<>]*?>'si";

$tpl->load_template('topusers1.tpl');

$tpl->set('{ava}', $ava);

$tpl->set('{nickname}', $userlink.$row['name'].'</a>');

$tpl->set('{signature}', preg_replace($nohtml,"",stripslashes($row['signature'])));

$tpl->set('{icq}', $row['icq']);

$tpl->set('{news_num}', '<a href="/user/'.$row['name'].'/news/">'.$row['news_num'].'</a>');

$tpl->set('{comm_num}', '<a href="/index.php?do=lastcomments&userid='.$row['user_id'].'">'.$row['comm_num'].'</a>');

$tpl->set('{blog_num}', '<a href="/user/'.$row['name'].'/news/">Мой блог на этом сайте</a>');

$tpl->compile('glamusers1');

$tpl->clear();

}

$db->free();

create_cache ("glamusers1", $tpl->result['glamusers1'], $config['skin']);

}

?>

на поле news_num в БД нет ключей и сортирка по этому полю крайне ресурсоемкое мероприятие

и наверное на comm_num тоже нет ?

Ссылка на сообщение
Поделиться на других сайтах

2spam:

Код glamusers1.php

Все там верно, не должно быть лишних запросов, кэш стоит правильно, если есть лишний запрос к БД то он не от этого файла.

и наверное на comm_num тоже нет ?

Нет.

Изменено пользователем spam
Ссылка на сообщение
Поделиться на других сайтах

Если убрать из запроса:

$sql = $db->query("SELECT user_id, name, foto, signature, news_num, comm_num, icq FROM ".PREFIX."_users order by news_num DESC LIMIT 0,$num");

comm_num то нагрузка исчезает.

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...