xmlhttp存在最大並發數,ajax設計應有所斟酌[zz]

來源:互聯網
上載者:User

這次認真的測試了三種瀏覽器(ie/firefox/opera)的xmlhttp並發行為,發現如果使用者同時發出很多xmlhttp 非同步請求,那麼瀏覽器不是一股腦全把請求發出去,而是存在一個最大並發數。我的機器測試發現,ie和ff裡面是2,opera是4。

所以說,在設計一個網站時,讓ajax頁面同時載入數十個xmlhttp請求不是明智的做法。在考慮減少介面耦合的同時,也應該斟酌速度問題。實際上,可以使用某些細化的設計,可以把多種請求綁定到一起發送,從而達到最佳化的目的。

下面是我的測試代碼:

 <?php //服務端ajaxserver.php

function _getmicrotime() 
{  
    list($usec, $sec) = explode(" ",microtime());  
    return ((float)$usec + (float)$sec);  

function _exit($msg) 

    echo("$msg/n"); 
    exit(); 

$mode = $_GET["mode"]; 

$f = fopen("$mode.log", "a+"); 
if(!$f) _exit(); 

$begin = _getmicrotime(); 
$str = "$begin/t". $_GET["flag"] . "/t begin /n"; 
fwrite($f, "$str"); 
fclose($f); 
echo($str); 

sleep(2); 

$f = fopen("$mode.log", "a+"); 
if(!$f) _exit(); 
$end = _getmicrotime(); 
$str = "$end/t". $_GET["flag"] . "/t end /n"; 
fwrite($f, "$str"); 
fclose($f); 
echo($str); 

?> 

//這是.html網頁代碼: <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> New Document </title>
<script language="JavaScript">
<!--
function $(id)
{
 return document.getElementById(id);
}
function ajax_object() {

  var A;
  try {
   A=new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
   try {
    A=new ActiveXObject("Microsoft.XMLHTTP");
   } catch (oc) {
    A=null;
   }
  }
  if(!A && typeof XMLHttpRequest != "undefined")
   A = new XMLHttpRequest();

  return A;
 }

function doit(flag)
{
 var uri = "ajaxserver.php?mode=opera&flag=" + flag ;
 var x = ajax_object();

 x.open("GET", uri, true);
 function callback() 
 { 
  if (x.readyState != 4) 
   return;
  if (x.status==200)
  {   
   $("result").value +=  x.responseText;
  }
 }
 if ("[XMLHttpRequest]"==x.constructor)
 {
  x.onload = callback ;
 }
 else
 {
  x.onreadystatechange = callback ;
 }
 x.send(null);
}

function doajax()
{
 doit(1);
 doit(2);
 doit(3);
 doit(4);
 doit(5);
}

 

//-->
</script>
</head>

<body>
<input type="button" value="doajax" onclick="doajax();">
<textarea cols="80" rows="60" id="result"></textarea>
</body>
</html>

************************************************
下面是測試結果:
IE的測試結果:
1157288179.03 2  begin 
1157288179.03 1  begin 
1157288181.03 1  end 
1157288181.04 2  end 
1157288181.05 3  begin 
1157288181.06 4  begin 
1157288183.05 3  end 
1157288183.06 5  begin 
1157288183.09 4  end 
1157288185.09 5  end 

firefox的測試結果
1157288092.36 1  begin 
1157288092.38 2  begin 
1157288094.36 1  end 
1157288094.38 2  end 
1157288094.39 3  begin 
1157288094.39 4  begin 
1157288096.4 4  end 
1157288096.42 3  end 
1157288096.42 5  begin 
1157288098.43 5  end 

opera的測試結果:
1157288410.88 1  begin 
1157288410.89 4  begin 
1157288410.89 2  begin 
1157288410.89 3  begin 
1157288412.89 1  end 
1157288412.89 2  end 
1157288412.92 5  begin 
1157288412.92 4  end 
1157288412.92 5  begin 
1157288412.92 3  end 
1157288414.93 5  end 
1157288414.95 5  end  cited: http://sithere.net/article.asp?id=729&page=3

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.