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

Как прикрутить кеширование к модулю Топ авторов 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.

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

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

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} выводились самые активные авторы с их кол-вом комментариев.

Как быть?

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

еще после

$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 тоже нет ?

Нет.

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

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

$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 то нагрузка исчезает.

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

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

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

Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

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