[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите оптимизировать код!
web-monster
Вообщем в левом меню идёт:

//--------Проверка на новые сообщения--------
$res = mysql_query("SELECT * FROM message WHERE ToUser='$logname' AND DelToUser='' AND status='non'");
$r=mysql_num_rows($res);

echo "
<A HREF='inbox.php' class='linkform'>Мои сообщения</A><script>var kolvo_mess=
$r;var kolvo_mess_prev=$r;</script>"; include "sound.php"; echo " <br>
"
;


в sound.php

<?php
if($access=="true")
{
echo '
<script type="text/javascript" src="scripts/jquery.js"></script>
<span id="content" class="orange"> </span>
'
;
?>

<script type="text/javascript">

function show()
{
$.ajax({

url: "check_messages.php",
cache: false,
success: function(html){
$("#content").html(html);
if(kolvo_mess>kolvo_mess_prev&&kolvo_mess!=0)
{
kolvo_mess_prev=kolvo_mess;
sound();
}

}
}
);
}

$(document).ready(function(){
show();
setInterval('show()',60000);
});

function sound(){
myDiv.innerHTML="<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000'

codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#4,0,0,0'
width='100%' height='100%'>
<param name='src' value='msg.swf'><embed src='msg.swf' pluginspage='http://www.macromedia.com/shockwave/download/' type='application/x-shockwave-flash'
width='100%' height='100%'></embed></object>"
;
}
</script>

<?php
}
?>


в check_messages.php:

<?php
include "config.php";

if($access=="true")
{
$res = mysql_query("SELECT * FROM message WHERE ToUser='$logname' AND DelToUser='' AND status='non'");
$r=mysql_num_rows($res);
if(empty($r)) { $r_display="";} else { $r_display=$r; }

echo "$r_display<script>kolvo_mess=$r;</script>";

$result = mysql_query("SELECT * FROM online WHERE user='$logname'");
$row = mysql_fetch_array($result);
$online_time=$row["time"];
$online_status=$row["status"];
if($online_time+600>$timesss&&$online_status=="online")
{
$raznitsa=$timesss-$online_time;
mysql_query("UPDATE online_time SET time = time + $raznitsa WHERE user = '$logname'");
}

mysql_query("UPDATE online SET time ='$timesss', status='online' WHERE user = '$logname'");
}

mysql_close();
?>


Собственно это проверка на новые сообщения и обновление online пользователей каждую минуту идёт запрос, но мне кажется что это нагружает сервак и появляется max_user_connection!

Помогите как можно сделать чтобы было или меньше запросов или просто ускорить!



Спустя 16 часов, 10 минут, 14 секунд (6.05.2010 - 08:03) Гость_Retropunk написал(а):
Можно сделать по другому, не хранить в базе статус(online, non) а хранить дату последнее посещения страницы сайта. Для этого можно в шапке сайта на всех страницах вставлять функцию которая будет записывать текущую дату для текущего пользователя в таблицу БД.
Далее чтобы снизить нагрузку пишешь скрипт который будет по cron запускаться каждую минуту(или сколько там тебе надо) и записывать в текстовый файл данные о пользователях, дата последнего посещения(см. выше, заполняем таблицу когда юзер проходит на любую страницу) у которых меньше 1 минуты(ну или сколько надо). потом тупо подключаем этот файл где надо и все.

Спустя 28 минут, 3 секунды (6.05.2010 - 08:31) stepan написал(а):
web-monster тебе лучше задуматься не об оптимизации кода, а о безопасности.

Спустя 24 минуты, 48 секунд (6.05.2010 - 08:55) web-monster написал(а):
а где дырки в безопасности не подскажите? А то я ещё можно сказать нуб))
Так и так идёт запись по времени, каждую минуту только ajax выполняется запрос, записи текущего времени когда зашёл пользователь а выборка идёт уже время +600сек если да то ты в online

Спустя 1 день, 3 часа, 39 минут, 36 секунд (7.05.2010 - 12:35) web-monster написал(а):
Цитата (stepan @ 6.05.2010 - 08:31)
web-monster тебе лучше задуматься не об оптимизации кода, а о безопасности.

Скажите где дырки))

Спустя 2 часа, 1 минута, 42 секунды (7.05.2010 - 14:37) Basili4 написал(а):
Возможно это к слову. (про безопасность) здесь мне кажется только одна уязвимость это переменная $logname если её если есть возможность изенить её тогда возможен хак
"SELECT * FROM online WHERE user='$logname' - сюда к $logname HAVING users.id<>0 прибавить и можно залететь. я например в запросах никогда * неиспользую всегда пишу имятаблы.* с одной строны одно и тоже а сдругой уже конкретно. и лишнего не допишут вроде так.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.