Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Слишком большое время обработки php+sql (https://javascript.ru/forum/server/12477-slishkom-bolshoe-vremya-obrabotki-php-sql.html)

Jekel 20.10.2010 03:54

С помощью неких личностей написал такое...но работает не коректно, выдает не полный ответ...читает мало с базы( должно читать 121 строку, читает и выдает 35+-
$userdat = mysql_fetch_assoc(mysql_query("SELECT * FROM users WHERE id='1'"));
	
    $count = 0; 
    $arr_x = array();
    $arr_y = array();
	
    for ($y=$userdat["y"]-5; $y<=$userdat["y"]+5; $y++){ 
        $arr_y[] = $y;
        for ($x=$userdat["x"]-5; $x<=$userdat["x"]+5; $x++){
            $arr_x[] = $x;
		}
	}
    $resource = mysql_query("SELECT * FROM `map` WHERE `loc` = 0 AND `x` IN (" . join(',', $arr_x) . ") AND `y` IN (" . join(',', $arr_y) . ")");
	
    while($data_map = mysql_fetch_assoc($resource)){
        $session_name = "x" . $count;
        if (empty($data_map['img'])) continue;
        if ($_SESSION[$session_name] != $data_map['img']){ 
            $_SESSION[$session_name] = $data_map["img"]; 
            $map .= "<d" . $count . ">" . $_SESSION[$session_name] . "</d" . $count . ">"; 
        }else{ 
            if ($_SESSION[$session_name]){
                $_SESSION[$session_name] = 0;
                $map .= "<d" . $count . ">" . $_SESSION[$session_name] . "</d" . $count .">"; 
            }
        } 
		
		$count++; 
    }

Gvozd 20.10.2010 09:12

Цитата:

Сообщение от Jekel
if (empty($data_map['img'])) continue;

оно, нэ?

Kolyaj 20.10.2010 09:40

Цитата:

Сообщение от Jekel
надо меньше 100ms ибо запросы на серв каждых 100мс поступают

А сетевые задержки вы не учитываете?

Gvozd 20.10.2010 09:55

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

subzey 20.10.2010 12:20

Часто ли от клиента дожна идти какая-то информация? Часто ли будут меняться переданные данные?

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

Если достаточно часто, то можно устроить некое подобие event-source (IE с файрфоксом, насколько я знаю, event-source не умеют). А именно — в старых добрых традициях чата Бородина слать последовательно теги <script> в скрытый ифрейм. Тогда можно сэкономить время на SYN→ACK→SYN-ACK и передаче заголовков запроса и ответа.

Другие предложения? Самому интересно. :)


Часовой пояс GMT +3, время: 01:33.