Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: как можно уменьшить нагрузку на сервер?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
php6
Отправлено: 15 Февраля, 2009 - 15:48:09
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Янв. 2009  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. $up = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".$x."_".($y-1)."_'"));
  2. $down = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".$x."_".($y+1)."_'"));
  3. $right = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".($x+1)."_".($y)."_'"));
  4. $left = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".($x-1)."_".($y)."_'"));
  5. $lup = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".($x-1)."_".($y-1)."_'"));
  6. $rup = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".($x+1)."_".($y-1)."_'"));
  7. $rdown = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".($x+1)."_".($y+1)."_'"));
  8. $ldown = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".($x-1)."_".($y+1)."_'"));
  9. if (@$up["name"]) $up = 1; else $up=0;
  10. if (@$down["name"]) $down = 1;  else $down=0;
  11. if (@$right["name"]) $right = 1;  else $right=0;
  12. if (@$left["name"]) $left = 1; else $left=0;
  13. if (@$lup["name"]) $lup = 1; else $lup=0;
  14. if (@$rup["name"]) $rup = 1; else $rup=0;
  15. if (@$rdown["name"]) $rdown = 1;  else $rdown=0;
  16. if (@$ldown["name"]) $ldown = 1;  else $ldown=0;
  17. if ($_GET["go_nature"]=='up' and $up==1) $y-=1;
  18. if ($_GET["go_nature"]=='down' and $down==1) $y+=1;
  19. if ($_GET["go_nature"]=='left' and $left==1) $x-=1;
  20. if ($_GET["go_nature"]=='right' and $right==1) $x+=1;
  21. if ($_GET["go_nature"]=='lup' and $lup==1) $x-=1;
  22. if ($_GET["go_nature"]=='rup' and $rup==1) $x+=1;
  23. if ($_GET["go_nature"]=='lup' and $lup==1) $y-=1;
  24. if ($_GET["go_nature"]=='rup' and $rup==1) $y-=1;
  25. if ($_GET["go_nature"]=='rdown' and $rdown==1) $x+=1;
  26. if ($_GET["go_nature"]=='ldown' and $ldown==1) $x-=1;
  27. if ($_GET["go_nature"]=='rdown' and $rdown==1) $y+=1;
  28. if ($_GET["go_nature"]=='ldown' and $ldown==1) $y+=1;
  29.  

Имеется карта местности в центре её персонаж а вокруг него эти переходы,
и из за множиства запросов грузит сервак .Можно ли как то уменьшить нагрузку?
 
 Top
Leviafant
Отправлено: 15 Февраля, 2009 - 17:22:19
Post Id



Новичок


Покинул форум
Сообщений всего: 36
Дата рег-ции: Авг. 2008  
Откуда: Курская обл


Помог: 0 раз(а)




Для начала не мешало бы узнать что именно грузит сервак, есть скрипты статискитки выполнения запросов и тд(xdebug & kcachegrind), при помощи которых можно узнать какой запрос скока обрабатывался, сколько времени ушло на обработку мусклом и тд
Я об этом почти ничего не знаю, на форуме об этом читал
http://waper[dot]ru/forum/topic/299983 читайте посты unnamed777


-----
Пока Рок жив буду жить и Я
 
 Top
Champion Супермодератор
Отправлено: 15 Февраля, 2009 - 17:56:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




К базе данных тут незачем после каждого раза обращаться. Вообще она не нужна здесь. Пользуйте ассоц. массивы.
 
 Top
valenok Модератор
Отправлено: 15 Февраля, 2009 - 18:08:05
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Спросили не как узнать сколько занимает каждый запрос времени, как оптимизировать алгоритм,
и во вторых не нужно всяких навороченных инструментов когда это делается простым вычитанием utime1 - utime2 .

А теперь об алгоритме.
Во первых можно все собрать в один запрос
к примеру: "SELECT name FROM locations WHERE `id` IN ( 'p_".($x-1)."_".($y+1)."_', '' , '' ) "

Во вторых не нужно к каждому запросу применять mysql_fetch_array.
Потому что есть mysql_result, тем более _array , а не _assoc или _row

В третих я бы тебе предложил хранить сектора как координаты x | y , а не как текст p_x_y_

В четвёртых тебе наверное очень скоро захочется делать не квадратные карты или запрещать переход
в какой нибудь соседний сектор.
Реализуется это так:


PHP:
скопировать код в буфер обмена
  1.  
  2. Сектора                             Пути
  3. +--------+---------+               +--------+--------+
  4. |   id   | name    |               |    id  |   id   |
  5. +--------+---------+               +--------+--------+
  6. |   1    | center  |               |   1    |     2  |
  7. +--------+---------+               + -------+--------+
  8. |    2   | hall    |               Разрешен переход из сектора 1 в сектор 2
  9. +--------+---------+                
  10.  


-----
Truly yours, Sasha.
 
My status
 Top
php6
Отправлено: 15 Февраля, 2009 - 23:23:07
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Янв. 2009  


Помог: 0 раз(а)




но если обьединить две клетки в одну
PHP:
скопировать код в буфер обмена
  1. $up = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".$x."_".($y-1)."_'"));
  2. $down = mysql_fetch_array (mysql_query("SELECT name FROM locations WHERE id='p_".$x."_".($y+1)."_'"));

как вы сказали
PHP:
скопировать код в буфер обмена
  1.  SELECT name FROM locations WHERE `id` IN ( 'p_".($x-1)."_".($y+1)."_', '' , '' ) "
  2.  

куда денутся потом $up и $down и не будет ли обьединены 2 клетки в одну?
так как $up - $down - $right - $left - $lup - $rup - $rdown - $ldown это разные направления переходов
Прикреплено изображение (Нажмите для увеличения)
рис.JPG
 
 Top
valenok Модератор
Отправлено: 15 Февраля, 2009 - 23:32:43
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Результатом будет 8 строк расположеных в том порядке, в ктором ты вписал значение в IN( .. ).
На тот случай если возможно не все 8 строк возвращаются, тоесть из некоторых мест нет прохода в другие,
то либо используй схему с таблицей путей, либо расшифровывай вот свои p_x_y_ в координаты
и сверяй где они будут находится относительно Xo, Yo . для этого лучше было хранить координаты в виде
x число | y число , а не строку p_x_y_


-----
Truly yours, Sasha.
 
My status
 Top
Гость
Отправлено: 16 Февраля, 2009 - 21:48:53
Post Id


УДАЛЁН










Цитата:
Результатом будет 8 строк расположеных в том порядке, в ктором ты вписал значение в IN( .. ).Результатом будет 8 строк расположеных в том порядке, в ктором ты вписал значение в IN( .. ).
Ну если не стоит отдельно ORDER BY в таком слчае они еще отсортируются как было указано
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB