[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите уменьшить скрипт
Ром@шка
Помогите пожалуйста оптимизировать код( а то мне кажется я там дико страшных вещен намутила. Эта страница грузится 20 секунд



<?php
if($comcenter == "1")
{
if(isset($login) and isset($password)){

$timer = time();
$fres = mysql_query("SELECT * FROM users ORDER BY visit DESC,id");
echo "


<body id='base-bf3-body' class='new-base-bf3-body is-loggedin fullwidth'>
<div id='comcenter-friends'>
<div class='comcenter-friends-border'></div>
<surf:container id='surface-comcenter-area'>
<div id='comcenter-area' class='comcenter-not-in-voice'>
<div id='friendlist-header'>
<div class='comcenter-contract'> </div>
<p>Командный центр (BETA)</p>
</div>
<div id='comcenter-loading'>
<div class='comcenter-loading-area'></div>
</div>
<div id='comcenter-tab-friends-content' class='comcenter-tab-content'>
<div id='comcenter-tab-friends-content-lists-wrapper'>
<surf:container id='comcenter-surface-friendrequests'>
</surf:container>
<surf:container id='comcenter-surface-friends'>
<ul class='comcenter-list'>
<li id='comcenter-offline-separator' class='comcenter-separator showing-offline'>
<div class='dropdownicon'></div>
<surf:container id='comcenterOfflineFriends'>
<span>В игре</span>
</li>"
;
while ($array = mysql_fetch_assoc($fres))
{
$fullnick = $array['tag'] . '' . $array['nickname'];
$resTime = $timer - $array['visit'];
$avatar = $array['avatar'];
$score = $array['score'];
foreach ($server_list as $server)
{
$server_list = lgsl_sort_servers($server_list);
$misc = lgsl_server_misc($server);
foreach ($server['p'] as $player)
{

$stat = "online";
$stat2 = "online";
if ($array['dolznost'] == "Лидер клана")
{$cl = "<img src='modules/img/cl.png' style='width:10px;' title='Лидер клана ".$array['team']."'>";}

echo "
<li id='comcenter-2832660339291615977' class='comcenter-friend-item comcenter-friend comcenter-friend-
$stat2 ' rel='2832660339291615977'>
<div class='comcenter-friend-draggable'></div>
<div class='comcenter-avatar'>
<div rel='2832660339291615977' class='base-avatar-container base-avatar-size-small'>
<div class='base-avatar-status-overlay base-avatar-status-overlay-
$stat'>
<img src='profile/avatars/"
.$avatar."' width='22' height='22' onerror=\"this.src='profile/avatars/noAvatar.png'\">
</div>
</div>
</div>
<div class='comcenter-username comcenter-username-idle'>
<a class='comcenter-username-link' href='profile.php?id="
.$array['id']."' >$fullnick".$array['nickend']." ($score) $cl $cw $ban
</a>
<div class='comcenter-username-away'> "
;
if($stat == "playing")
{
if($array['ccstatus'] == "2")
{
if($array['gender'] == "Парень")
{echo "<font color='orange'>Отошел</font>";}
else
{echo "<font color='orange'>Отошла</font>";}
}

else if($array['ccstatus'] == "3")
{
if($array['gender'] == "Парень")
{echo "<font color='red'>Занят</font>";}
else
{echo "<font color='red'>Занята</font>";}
}

else
{
echo "<font color='steelblue'>В сети</font>";
}
}

else if($stat == "online")
{
echo "<font color='#5bb138'>{$server['s']['name']}</font>";
}
else
{
echo "Вне системы";
}

echo "</div>
</div>
<div class='comcenter-interact-container'>
<a href='
{$misc['software_link']}'>
<div title='Присоединиться к игре' class='bubble-title-left join-friend-submit-link comcenter-interact-playing'>
</div> </a>

<div class='comcenter-interact-container'>
</div>
</li> "
;
}
}
}
}

echo"
<li id='comcenter-offline-separator' class='comcenter-separator showing-offline'>
<div class='dropdownicon'></div>
<surf:container id='comcenterOfflineFriends'>
<span>Список пользователей</span>
</li>"
;
$fres2 = mysql_query("SELECT * FROM users ORDER BY visit DESC,id");
$num_rows = mysql_num_rows($fres2);
while ($array = mysql_fetch_assoc($fres2))
{
$fullnick = $array['tag'] . '' . $array['nickname'];
$resTime = $timer - $array['visit'];
$avatar = $array['avatar'];
if($resTime < 300)
{
$db_stat = 1;
$stat = "playing";
$stat2 = "online";
}
else
{
$db_stat = 0;
$stat = "offline";
$stat2 = "offline";
}
if ($array['dolznost'] == "Лидер клана")
{$cl = "<img src='modules/img/cl.png' style='width:10px;' title='Лидер клана ".$array['team']."'>";}
else
{$cl = "";}

echo "
<li id='comcenter-2832660339291615977' class='comcenter-friend-item comcenter-friend comcenter-friend-
$stat2 ' rel='2832660339291615977'>
<div class='comcenter-friend-draggable'></div>
<div class='comcenter-avatar'>
<div rel='2832660339291615977' class='base-avatar-container base-avatar-size-small'>
<div class='base-avatar-status-overlay base-avatar-status-overlay-
$stat'>
<img src='profile/avatars/"
.$avatar."' width='22' height='22' onerror=\"this.src='profile/avatars/noAvatar.png'\">
</div></div></div>
<div class='comcenter-username comcenter-username-idle'>
<a class='comcenter-username-link' href='profile.php?id="
.$array['id']."' >$fullnick".$array['nickend']." $cl $cw $ban
</a>
<div class='comcenter-username-away'>
"
;
if($stat == "playing")
{
if($array['ccstatus'] == "2")
{
if($array['gender'] == "Парень")
{echo "<font color='orange'>Отошел</font>";}
else
{echo "<font color='orange'>Отошла</font>";}
}

else if($array['ccstatus'] == "3")
{
if($array['gender'] == "Парень")
{echo "<font color='red'>Занят</font>";}
else
{echo "<font color='red'>Занята</font>";}
}

else
{
echo "<font color='steelblue'>В сети</font>";
}
}

else if($stat == "online")
{
echo "<font color='#5bb138'>Играет в Modern Warfare</font>";
}
else
{
echo "Вне системы";
}

echo "</div>
</div>
<div class='comcenter-interact-container'>
<a href='http://bfgc.agh.su/find-players2.php?search="
.$array['xuid']."&searchtype=3'><button title='Совпадения' class='bubble-title-left comcenter-interact-chat'></button></a>
</div>
</li> "
;
}
echo"
</ul>
</surf:container>
</div>
</div>
<surf:container id='comcenter-party'>
<div class='comcenter-settings'>
<div class='base-left'>
</div>
<div class='base-right'>
<span class='base-button-party-clean-button'><div class='comcenter-chat-group-icon'></div>Игроки:
$num_rows</span>
</div>
</div>
</surf:container>
</div>
</surf:container>

"
;}}
?>




Спустя 25 минут, 58 секунд (1.08.2012 - 09:25) TMake написал(а):
Ром@шка Пришло время изучить MVC

Спустя 12 минут, 45 секунд (1.08.2012 - 09:38) YVSIK написал(а):
первым делом , чтоб было видно надо лесинкой разметить сам код,
что во что вложено , пример:
если ИФ имеет вложенный ещё в какой-то ИФ, то пишем так:
if($stat == "playing")
{
if($array['ccstatus'] == "2")
{
if($array['gender'] == "Парень")
{
echo "<font color='orange'>Отошел</font>";
}
else
{
echo "<font color='orange'>Отошла</font>";
}
}

а нестолбиком как у тебя
второе
самое время разделить где будет разметка и где код <?php....?>
вот таким образом
<?php
$fres = mysql_query("SELECT * FROM users ORDER BY visit DESC,id");
echo
?>
<body id='base-bf3-body' class='new-base-bf3-body is-loggedin fullwidth'>
..................................................
<
span>В игре</span>
</
li>
<?php
while ($array = mysql_fetch_assoc($fres))
?>

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

Спустя 31 минута, 24 секунды (1.08.2012 - 10:09) YVSIK написал(а):
Ром@шка
ещё у тебя хромает логика вложеннотей
не пиши так
Свернутый текст
if($array['ccstatus'] == "2")
{
if($array['gender'] == "Парень")
{echo "<font color='orange'>Отошел</font>";}
else
{echo "<font color='orange'>Отошла</font>";}
}

else if($array['ccstatus'] == "3")
{
if($array['gender'] == "Парень")
{echo "<font color='red'>Занят</font>";}
else
{echo "<font color='red'>Занята</font>";}
}

else

когда вложеныые ИФы и тут-же всречаются ИФ_ЕЛСЕ
то так интерпретатору будет понятней и тебе самой возможность уйти от каши

<?php 
if(....)
{
if else'';
}
{

if else'';
}
{

if else'';
}
}

?>

потому он у тебя и маится)), что и зечем выполнять и, и бегает туда суда все время возвращаясь что он ещё пропустил и что не учел.)))

Спустя 51 минута, 32 секунды (1.08.2012 - 11:01) altairo2087 написал(а):
...$fres = mysql_query("SELECT * FROM users ORDER BY visit DESC,id");...

зачем 2 раза за страницу долбить базу одним и тем же запросом:)

или пжди... он под if'ом. Как сказал Гарик из Камеди: "Все я запутался" biggrin.gif

сделай обработку БД в начале страницы, а потом просто используй выборку. И звездочку убери в запросе, конкретизируй что выбираешь.

Спустя 1 час, 4 минуты, 17 секунд (1.08.2012 - 12:05) Ром@шка написал(а):
Цитата (altairo2087 @ 1.08.2012 - 09:01)

или пжди... он под if'ом. Как сказал Гарик из Камеди: "Все я запутался" biggrin.gif
ь.

Я тоже) Про if вообще ничего не поняла(

Спустя 2 минуты, 8 секунд (1.08.2012 - 12:07) inpost написал(а):
Игроков хоть не 1000? Если их 100-200, то вся страница за исключением:
$server_list = lgsl_sort_servers($server_list);
$misc = lgsl_server_misc($server);
Будет загружаться за ~0.5 сек. Далее просто передаваться картинки... Я надеюсь, под долгой загрузкой ты имела ввиду "появление первых данных на экране", а не дожидания всех данных на экране.
А с теми функциями я не знаком, поэтому про их скорость ничего ответить не могу.

Для того, чтобы ты понимала скрипт и ориентировалась в нём, а так же другим людям тоже удобно было ПОНИМАТЬ его, а не кричать: "я запутался", надо использовать один из популярных стилей кодирования. Об этом почитай в гугле и выбери оптимальный для тебя: https://www.google.ru/#hl=ru&newwindow=1&ou...iw=1920&bih=987

П.С. Гугл перешел на https? Хм...

Спустя 36 минут, 8 секунд (1.08.2012 - 12:44) Ром@шка написал(а):
Игроков хоть не 1000?

Серверов 306 и на каждом по 14-48 игроков.
Конечно много

Спустя 3 минуты, 11 секунд (1.08.2012 - 12:47) DarkLynx написал(а):
Честно говоря не очень вглядывался в скрипт.. У тебя на странице выводится статистика игроков по всем 306 серверам сразу?

Спустя 15 минут, 41 секунда (1.08.2012 - 13:02) Ром@шка написал(а):
выходит что так.

вот мониторинг: http://bframe.ru/

логин: test
пароль: 123321

Код из первого поста это код правой колонки после авторизации.
Понять не могу из-за чего она грузится год**

Спустя 14 минут, 55 секунд (1.08.2012 - 13:17) DarkLynx написал(а):
Цитата (Ром@шка @ 1.08.2012 - 11:02)
выходит что так.

вот мониторинг: http://bframe.ru/

логин: test
пароль: 123321

Код из первого поста это код правой колонки после авторизации.
Понять не могу из-за чего она грузится год**

Не знаю как у Вас, у меня загрузилась приемлемо быстро...
Что могу посоветовать.. Конечно это подойдет под вашу задачу.
Разделить страницу на сервера.
Скриптом выводить только их названия и далее при клике на название сервера ajax подгружать данные по игрокам по этому серверу.

Спустя 22 минуты, 15 секунд (1.08.2012 - 13:40) inpost написал(а):
PHP отдаёт информацию МОМЕНТАЛЬНО. Далее лишь время на то, чтобы браузер распарсил код и вывел его на странице. + подкачка HTML данных. Это всё нормально для вывода на странице несколько тысяч данных.

Спустя 4 минуты, 27 секунд (1.08.2012 - 13:44) DarkLynx написал(а):
Цитата (inpost @ 1.08.2012 - 11:40)
PHP отдаёт информацию МОМЕНТАЛЬНО. Далее лишь время на то, чтобы браузер распарсил код и вывел его на странице. + подкачка HTML данных. Это всё нормально для вывода на странице несколько тысяч данных.

Безусловно, но согласись, что подгрузка 10 тысяч (например) табличных html строк со всеми стилями и картинками затянут процесс полной прогрузки страницы, и подгружать эти самые табличные строки только по мере необходимости ajax'ом весьма не самое дурное решение..

Мне вот например не нужно смотреть 305 серверов, я хочу только один.. зачем мне ждать пока они подгрузятся если меня интересует только 1..

Спустя 50 минут, 39 секунд (1.08.2012 - 14:35) inpost написал(а):
DarkLynx
Для этого отлично подойдут различные фильтры, или в крайнем случае, как ты сказал, группировка.

Спустя 8 минут, 34 секунды (1.08.2012 - 14:43) altairo2087 написал(а):
можно в firebug например посмотреть шкалу загрузки по времени.

Mozilla Firefox -> дополнение Firebug (если еще нет)

F12 -> вкладка "сеть"

видно, что как и сколько грузится.
Быстрый ответ:

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