लोकप्रिय ब्राउज़रों में कितने समवर्ती AJAX (XmlHttpRequest) अनुरोधों की अनुमति है?


358

फ़ायरफ़ॉक्स 3 में, उत्तर 6 प्रति डोमेन है: जैसे ही एक ही डोमेन पर 7 वें XmlHttpRequest (किसी भी टैब पर) को निकाल दिया जाता है, इसे अन्य 6 फिनिश में से एक तक पंक्तिबद्ध किया जाता है।

अन्य प्रमुख ब्राउज़रों के लिए संख्याएँ क्या हैं?

इसके अलावा, क्या मेरे उपयोगकर्ताओं को अपने ब्राउज़र सेटिंग्स को संशोधित किए बिना इन सीमाओं के आसपास तरीके हैं? उदाहरण के लिए, क्या जोंसप अनुरोधों की संख्या की सीमाएं हैं (जो एक XmlHttpRequest वस्तु के बजाय स्क्रिप्ट टैग इंजेक्शन का उपयोग करते हैं)?

पृष्ठभूमि: मेरे उपयोगकर्ता एक वेब पेज से सर्वर पर XmlHttpRequests कर सकते हैं, सर्वर को दूरस्थ मेजबानों पर ssh कमांड चलाने के लिए कह सकते हैं। यदि दूरस्थ होस्ट नीचे हैं, तो ssh कमांड को विफल होने में कुछ मिनट लगते हैं, अंततः मेरे उपयोगकर्ताओं को आगे कोई कमांड करने से रोकते हैं।


अपनी स्थिति के बारे में सोचकर, यह देखने के लिए कि क्या यह ऊपर या नीचे है, दूरस्थ नली को पिंग करने की व्यवहार्यता क्या है? यह आपके प्रश्न का उत्तर नहीं देगा, लेकिन यह एक बेहतर वर्कफ़्लो हो सकता है।
बॉब

1
धन्यवाद Bob, यह दो दृष्टिकोणों में से एक है जिसे मैंने इस समस्या को ठीक करने की योजना बनाई थी - मैंने इसे प्रश्न में उल्लेख किया लेकिन निर्णय लिया कि यह बंद विषय था। (एक अन्य दृष्टिकोण सर्वर के पास है, जिसे मैं नियंत्रित करता हूं, ssh अनुरोधों को टाइमआउट करता है।)
माइकल गुंडलाच

1
मुझे लगता है कि आपके पास आपका जवाब बहुत है ... सफारी और क्रोम समर्थन को कम से कम 2 मानने के लिए यह सुरक्षित से अधिक है, इसलिए आप हमेशा मान सकते हैं 2.
रेक्स एम

1
Windows Vista पर Chrome 2.0.172.28 का उपयोग करने पर मुझे 6 समवर्ती कनेक्शन मिले।
कैलम

2
मुझे अभी यह पृष्ठ stevesouders.com/blog/2008/03/20/… मिला है, जो कुछ और नंबर देता है और इस बारे में चर्चा करता है।
डेविड जॉनस्टोन

जवाबों:


143

एक चाल जिसका उपयोग आप समवर्ती कनेक्शन की संख्या बढ़ाने के लिए कर सकते हैं, एक अलग उप डोमेन से अपनी छवियों को होस्ट करने के लिए है। इन्हें अलग-अलग अनुरोधों के रूप में माना जाएगा, प्रत्येक डोमेन वह है जो समवर्ती अधिकतम तक सीमित होगा।

IE6, IE7 - दो की सीमा है। IE8 6 है अगर आपके पास ब्रॉडबैंड है - 2 (यदि यह डायल अप है)।


4
नहीं, सीमाएँ डोमेन पर थोपी गई हैं। यदि आप अपनी साइट के अलावा एक उपडोमेन था तो आप तकनीकी रूप से 12 कनेक्शन तक एफएफ प्राप्त कर सकते हैं।
बॉब

1
इसलिए अगर मैं आपको समझता हूं, तो FF सभी अनुरोधों (एक डोमेन के लिए) को 6 तक सीमित करता है - केवल एक डोमेन के लिए XmlHttpRequests नहीं। और अन्य ब्राउज़र अलग-अलग सीमा के साथ एक ही काम करते हैं। सही बात?
माइकल गुंडलाच

1
ओह हाँ, यदि आपके पास एक हजार छवियों वाला पृष्ठ है, तो यह उन्हें छह के समूहों में डाउनलोड करेगा। मेरा मानना ​​है कि ज्यादातर अन्य मुख्यधारा के ब्राउज़र उसी तरह काम करते हैं।
बॉब

7
वाह। यह एक अच्छी चाल है। यह भी बताता है कि मैप इंजन के लिए टाइल-सर्वर चीजों को गति देने के लिए कितने नकली उप-डोमेन (आमतौर पर मैप्स 1।whatever.com, Maps2.whatever.com, Maps3.whatever.com जैसे कुछ) बनाते हैं।
मेवप्लप

2
@ इसके अलावा, ब्राउज़र अपने समवर्ती अजाक्स की अधिकतम संख्या के समानांतर रखता है जो हर समय अनुमति देता है। यदि आप कार्रवाई में देखना चाहते हैं, तो नीचे दिए गए मेरे उत्तर का प्रयास करें
लुइस सिकोट

103

ब्राउजरस्कोप पर नेटवर्क परिणाम आपको प्रति होस्टनाम और अधिकतम कनेक्शन दोनों लोकप्रिय ब्राउज़रों के लिए कनेक्शन देगा । डेटा को "जंगली में" उपयोगकर्ताओं पर परीक्षण चलाकर इकट्ठा किया जाता है, इसलिए यह अद्यतित रहेगा।


3
दुर्भाग्य से यह अब तक दूर से नहीं दिखता है
डेव लॉरेंस

@DaveLawrence मैंने अभी-अभी चेक किया है और पूरा डेटा सेट क्रोम 60 और 61 को सम्‍मिलित करता है जो आज तक का है।
साइमन ईस्ट

24

IE6 / IE7 के साथ एक रजिस्ट्री में समवर्ती अनुरोधों की संख्या को कम कर सकता है। यहां बताया गया है कि इसे चार में से कैसे सेट करें।

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"MaxConnectionsPerServer"=dword:00000004
"MaxConnectionsPer1_0Server"=dword:00000004

15
-1। ओपी ने कहा without having my users modify their browser settings। इसके अलावा, यह व्यावहारिक नहीं है क्योंकि प्रत्येक ग्राहक को ऐसा करना होगा।
Razort4x

23
यह फिर भी इस मुद्दे से संबंधित एक बहुत ही उपयोगी बात है। शायद यह एक जवाब के रूप में एक टिप्पणी में बेहतर पोस्ट किया गया होता?
JD स्मिथ

7

मैंने अभी www.browserscope.org और IE9 और Chrome 24 के साथ जाँच की है कि आपके पास एकल डोमेन के 6 समवर्ती कनेक्शन हो सकते हैं, और 17 से कई तक हो सकते हैं।


6

IE 9 के अनुसार - क्या बदला है? HttpWatch ब्लॉग पर, IE9 में अभी भी वीपीएन पर 2 कनेक्शन सीमा है।

वीपी स्टिल क्लोबर्स IE 9 प्रदर्शन का उपयोग करना

हमने पहले IE 8 में समवर्ती कनेक्शन की अधिकतम संख्या के स्केलिंग बैक के बारे में बताया था जब आपका पीसी वीपीएन कनेक्शन का उपयोग करता है। यह तब भी हुआ जब ब्राउज़र ट्रैफ़िक उस कनेक्शन पर नहीं गया।

दुर्भाग्य से, IE 9 उसी तरह से वीपीएन कनेक्शन से प्रभावित होता है:


6

मेरे पास एक एकल फ़ाइल AJAX परीक्षक है। का आनंद लें!!! सिर्फ इसलिए कि मुझे अपने होस्टिंग प्रदाता के साथ समस्याएं हुई हैं

<?php /*

Author:   Luis Siquot
Purpose:  Check ajax performance and errors
License:  GPL
site5:    Please don't drop json requests (nor delay)!!!!

*/

$r = (int)$_GET['r'];
$w = (int)$_GET['w'];
if($r) { 
   sleep($w);
   echo json_encode($_GET);
   die ();
}  //else
?><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">

var _settimer;
var _timer;
var _waiting;

$(function(){
  clearTable();
  $('#boton').bind('click', donow);
})

function donow(){
  var w;
  var estim = 0;
  _waiting = $('#total')[0].value * 1;
  clearTable();
  for(var r=1;r<=_waiting;r++){
       w = Math.floor(Math.random()*6)+2;
       estim += w;
       dodebug({r:r, w:w});
       $.ajax({url: '<?php echo $_SERVER['SCRIPT_NAME']; ?>',
               data:    {r:r, w:w},
               dataType: 'json',   // 'html', 
               type: 'GET',
               success: function(CBdata, status) {
                  CBdebug(CBdata);
               }
       });
  }
  doStat(estim);
  timer(estim+10);
}

function doStat(what){
    $('#stat').replaceWith(
       '<table border="0" id="stat"><tr><td>Request Time Sum=<th>'+what+
       '<td>&nbsp;&nbsp;/2=<th>'+Math.ceil(what/2)+
       '<td>&nbsp;&nbsp;/3=<th>'+Math.ceil(what/3)+
       '<td>&nbsp;&nbsp;/4=<th>'+Math.ceil(what/4)+
       '<td>&nbsp;&nbsp;/6=<th>'+Math.ceil(what/6)+
       '<td>&nbsp;&nbsp;/8=<th>'+Math.ceil(what/8)+
       '<td> &nbsp; (seconds)</table>'
    );
}

function timer(what){
  if(what)         {_timer = 0; _settimer = what;}
  if(_waiting==0)  {
    $('#showTimer')[0].innerHTML = 'completed in <b>' + _timer + ' seconds</b> (aprox)';
    return ;
  }
  if(_timer<_settimer){
     $('#showTimer')[0].innerHTML = _timer;
     setTimeout("timer()",1000);
     _timer++;
     return;
  }
  $('#showTimer')[0].innerHTML = '<b>don\'t wait any more!!!</b>';
}


function CBdebug(what){
    _waiting--;
    $('#req'+what.r)[0].innerHTML = 'x';
}


function dodebug(what){
    var tt = '<tr><td>' + what.r + '<td>' + what.w + '<td id=req' + what.r + '>&nbsp;'
    $('#debug').append(tt);
}


function clearTable(){
    $('#debug').replaceWith('<table border="1" id="debug"><tr><td>Request #<td>Wait Time<td>Done</table>');
}


</script>
</head>
<body>
<center>
<input type="button" value="start" id="boton">
<input type="text" value="80" id="total" size="2"> concurrent json requests
<table id="stat"><tr><td>&nbsp;</table>
Elapsed Time: <span id="showTimer"></span>
<table id="debug"></table>
</center>
</body>

संपादित करें:
r का अर्थ है पंक्ति और w प्रतीक्षा समय।
जब आप प्रारंभ में प्रेस बटन 80 (या किसी भी अन्य नंबर) समवर्ती ajax अनुरोध के जावास्क्रिप्ट द्वारा लॉन्च किए जाते हैं, लेकिन जैसा कि ज्ञात है कि वे ब्राउज़र द्वारा स्पूल किए गए हैं। इसके अलावा वे सर्वर से समानांतर में अनुरोध किया जाता है (कुछ संख्या तक सीमित है, यह इस सवाल का तथ्य है)। यहां अनुरोधों को एक यादृच्छिक विलंब (w द्वारा स्थापित) के साथ सर्वर साइड हल किया जाता है। प्रारंभ समय पर सभी अजाक्स कॉल को हल करने के लिए आवश्यक समय की गणना की जाती है। जब परीक्षण समाप्त हो जाता है, तो आप यह देख सकते हैं कि क्या यह आधा लिया, तीसरा लिया, कुल समय का एक चौथाई, आदि लिया, जो कि सर्वर पर कॉल पर समानता थी घटाया। यह सख्त नहीं है, और न ही सटीक है, लेकिन वास्तविक समय में देखने के लिए अच्छा है कि कैसे अजाक्स कॉल को पूरा किया जाता है (आने वाले क्रॉस को देखकर)। और अजाक्स मूल बातें दिखाने के लिए एक बहुत ही सरल आत्म निहित स्क्रिप्ट है।
बेशक, यह मानता है, कि सर्वर साइड किसी भी अतिरिक्त सीमा का परिचय नहीं दे रहा है।
अधिमानतः फायरबग नेट पैनल (या आपके ब्राउज़र के समकक्ष) के साथ संयोजन में उपयोग करें


इसलिए मैं पुष्टि करता हूं, एफएफ 3 छह समवर्ती अनुरोधों पर शुरू होता है
लुइस सिकोट

क्या आप बता सकते हैं कि आपने यहाँ क्या किया? R और w क्या है? विश्लेषण के परिणाम की प्रिंट स्क्रीन बहुत सराहना की जाएगी
रॉय नमिर

4

खुद का टेस्ट लिखा। स्टैकओवरफ़्लो पर कोड का परीक्षण किया, ठीक काम करता है मुझे बताता है कि क्रोम / एफएफ 6 कर सकते हैं

var change = 0;
var simultanius = 0;
var que = 20; // number of tests

Array(que).join(0).split(0).forEach(function(a,i){
    var xhr = new XMLHttpRequest;
    xhr.open("GET", "/?"+i); // cacheBust
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 2){
            change++;
            simultanius = Math.max(simultanius, change);
        }
        if(xhr.readyState == 4){
            change--;
            que--;
            if(!que){
                console.log(simultanius);
            }
        }
    };
    xhr.send();
});

यह अधिकांश वेबसाइटों के लिए काम करता है जो अलग-अलग समय पर रीडिस्टेट परिवर्तन की घटना को ट्रिगर कर सकते हैं। (उर्फ: निस्तब्धता)

मैं अपने नोड.जेएस सर्वर पर ध्यान देता हूं कि मुझे घटना / फ्लश को ट्रिगर करने के लिए कम से कम 1025 बाइट्स का उत्पादन करना था। अन्यथा घटनाएँ तीनों अवस्थाओं को एक बार में पूरा कर देती हैं जब अनुरोध पूरा हो जाता है तो यहाँ मेरा बैकएंड है:

var app = require('express')();

app.get("/", function(req,res) {
    res.write(Array(1025).join("a"));
    setTimeout(function() {
        res.end("a");
    },500);
});

app.listen(80);

अपडेट करें

मुझे लगता है कि अब आपके पास 2x अनुरोध तक हो सकता है यदि आप एक ही समय में xhr और fetch api दोनों का उपयोग कर रहे हैं

var change = 0;
var simultanius = 0;
var que = 30; // number of tests

Array(que).join(0).split(0).forEach(function(a,i){
    fetch("/?b"+i).then(r => {
        change++;
        simultanius = Math.max(simultanius, change);
        return r.text()
    }).then(r => {
        change--;
        que--;
        if(!que){
            console.log(simultanius);
        }
    });
});

Array(que).join(0).split(0).forEach(function(a,i){
    var xhr = new XMLHttpRequest;
    xhr.open("GET", "/?a"+i); // cacheBust
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 2){
            change++;
            simultanius = Math.max(simultanius, change);
        }
        if(xhr.readyState == 4){
            change--;
            que--;
            if(!que){
                document.body.innerHTML = simultanius;
            }
        }
    };
    xhr.send();
});


यह 19 पर मेरा कहना है, यह टूट गया है?
पौई

फ़ायरफ़ॉक्स डेवलपर संस्करण 57.0b12 कहता है 2.
एंथोनीबी

0

मेरा मानना ​​है कि समवर्ती http अनुरोधों की एक अधिकतम संख्या है जो ब्राउज़र एक ही डोमेन के लिए करेंगे, जो उपयोगकर्ता की सेटिंग्स और ब्राउज़र के आधार पर 4-8 अनुरोधों के क्रम में है।

आप विभिन्न डोमेन पर जाने के लिए अपने अनुरोध सेट कर सकते हैं, जो संभव नहीं है या संभव नहीं है। याहू के लोगों ने इस क्षेत्र में बहुत शोध किया, जिसके बारे में आप यहाँ पढ़ सकते हैं । याद रखें कि आपके द्वारा जोड़ा गया प्रत्येक नया डोमेन भी DNS लुकअप की आवश्यकता है। YSlow लोग समानांतर अनुरोधों और DNS लुकअप के बीच एक अच्छा समझौता प्राप्त करने के लिए 2 और 4 डोमेन के बीच सलाह देते हैं, हालांकि यह पृष्ठ के लोडिंग समय पर ध्यान केंद्रित कर रहा है, न कि AJAX अनुरोधों के बाद।

क्या मैं पूछ सकता हूं कि आप इतने सारे अनुरोध क्यों करना चाहते हैं? एक ही डोमेन के लिए अनुरोधों की संख्या को सीमित करने वाले ब्राउज़रों के लिए अच्छे कारण हैं। यदि संभव हो तो आप बंडलिंग अनुरोधों से बेहतर होंगे।


1
समान उत्पत्ति नीति के कारण मेरा XmlHttpRequests आपके सुझाव के अनुसार विभिन्न डोमेन पर नहीं जा सकता है। (शायद इस समस्या को हल करने के लिए jsonp का उपयोग करने के लिए यह एक तर्क है।) यह पृष्ठ कई कंप्यूटरों के लिए एक कमांड-एंड-कंट्रोल डैशबोर्ड है; इस प्रकार एक अनुरोध उपयोगकर्ता द्वारा अनुरोधित निष्पादन के अनुसार है।
माइकल गुंडलाच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.