জনপ্রিয় ব্রাউজারগুলিতে কয়টি যুগ্ম AJAX (XMLHttpRequest) অনুরোধ অনুমোদিত?


358

ফায়ারফক্স 3-তে, প্রতি ডোমেনের জন্য 6 টির উত্তর: একই ডোমেনের 7 ম XMLHttpRequest (যে কোনও ট্যাবে) বরখাস্ত হওয়ার সাথে সাথে এটি অন্য 6 টির একটির সমাপ্তি অবধি অবধি সজ্জিত থাকবে।

অন্যান্য বড় ব্রাউজারগুলির জন্য সংখ্যাগুলি কী কী?

এছাড়াও, আমার ব্যবহারকারীদের তাদের ব্রাউজার সেটিংস সংশোধন না করে এই সীমাগুলির চারপাশে কী উপায় রয়েছে? উদাহরণস্বরূপ, jsonp অনুরোধের সংখ্যার কি সীমাবদ্ধতা রয়েছে (যা স্ক্রিপ্ট ট্যাগ ইঞ্জেকশনটি XMLHttpRequest অবজেক্টের পরিবর্তে ব্যবহার করে)?

পটভূমি: আমার ব্যবহারকারীরা সার্ভারকে দূরবর্তী হোস্টগুলিতে ssh কমান্ড চালাতে অনুরোধ করে একটি ওয়েব পৃষ্ঠা থেকে সার্ভারে XMLHttpRequests করতে পারে। যদি দূরবর্তী হোস্টগুলি নিচে থাকে, তবে ssh কমান্ডটি ব্যর্থ হতে কয়েক মিনিট সময় নেয়, অবশেষে আমার ব্যবহারকারীদের আরও কোনও কমান্ড কার্যকর করতে বাধা দেয়।


আপনার পরিস্থিতি সম্পর্কে ভাবনা, দূরবর্তী পায়ের পাতার মোজাবিশেষটি উপরে বা নীচে রয়েছে কিনা তা পিং করার সম্ভাব্যতা কী? এটি আপনার প্রশ্নের উত্তর দেবে না, তবে এটি আরও ভাল ওয়ার্কফ্লো হতে পারে।
বব

1
ধন্যবাদ বব, আমি যে দুটি পদ্ধতির মধ্যে এই সমস্যাটি সমাধানের পরিকল্পনা করেছিলাম তার মধ্যে একটি - আমি প্রশ্নে এটি উল্লেখ করার বিষয়টি বিবেচনা করেছিলাম তবে সিদ্ধান্ত নিয়েছিলাম এটি অফ-টপিক। (আর একটি পদ্ধতি হ'ল সার্ভারটি, যা আমি নিয়ন্ত্রণ করি, এসএসএস অনুরোধের সময়সীমা শেষ করে))
মাইকেল গুন্ডল্যাচ

1
আমি মনে করি আপনার কাছে বেশিরভাগ উত্তর রয়েছে ... সাফারি এবং ক্রোম সমর্থন কমপক্ষে 2 হিসাবে ধরে নেওয়া নিরাপদ ছাড়াও আপনি সর্বদা 2 ধরে নিতে পারেন
রেক্স এম

1
উইন্ডোজ ভিস্তার উপর ক্রোম 2.0.172.28 ব্যবহার করে আমি 6 সমবর্তী সংযোগ পেয়েছি।
কলম

2
আমি এই পৃষ্ঠাটি সবেমাত্র পেয়েছি stevesouders.com/blog/2008/03/20/… যা এই সম্পর্কে আরও কয়েকটি সংখ্যা এবং একটি আলোচনা দেয়।
ডেভিড জনস্টোন

উত্তর:


143

সাম্প্রতিক সংযোগের সংখ্যা বাড়াতে আপনি যে কৌশলটি ব্যবহার করতে পারেন তা হ'ল আপনার সাবমোহনের একটি ভিন্ন উপ ডোমেন থেকে হোস্ট করা। এগুলিকে পৃথক অনুরোধ হিসাবে বিবেচনা করা হবে, প্রতিটি ডোমেন যা একযোগে সর্বাধিক সীমাবদ্ধ থাকবে।

আই 6, আই 7 - এর দুটি সীমা রয়েছে। আপনার ব্রডব্যান্ড - 2 থাকলে আই 8 হয় 6 - যদি এটি ডায়াল আপ হয়।


4
না, সীমাটি ডোমেনে চাপানো হয়েছে। সুতরাং আপনি যদি আপনার সাইটের পাশাপাশি একটি সাবডোমেন থাকেন তবে আপনি প্রযুক্তিগতভাবে 12 টি সংযোগ পর্যন্ত এফএফ পেতে পারেন।
বব

1
সুতরাং যদি আমি আপনাকে বুঝতে পারি, এফএফ সমস্ত অনুরোধগুলি (একটি একক ডোমেনে) সীমাবদ্ধ করে 6 - কেবলমাত্র একক ডোমেনের জন্য এক্সএমএলএইচটিপি অনুরোধ নয়। এবং অন্যান্য ব্রাউজারগুলি একই কাজ বিভিন্ন সীমাবদ্ধ করে do সঠিক?
মাইকেল গুন্ডল্যাচ

1
ওহ হ্যাঁ, আপনার যদি হাজার পৃষ্ঠা সহ একটি পৃষ্ঠা থাকে তবে এটি ছয়টি দলে তাদের ডাউনলোড করবে। আমি বিশ্বাস করি যে অন্যান্য মূলধারার ব্রাউজারগুলি একইভাবে কাজ করে।
বব

7
কি দারুন. এটি একটি ভাল কৌশল। এটি আরও ব্যাখ্যা করে যে কেন মানচিত্র ইঞ্জিনগুলির জন্য টাইল-সার্ভারগুলি জিনিসগুলিকে ত্বরান্বিত করার জন্য বেশ কয়েকটি ভুয়া সাব-ডোমেন তৈরি করে (সাধারণত মানচিত্র 1.wਜইন ডটকম, ম্যাপস 2.উইস.কম.
meawoppl

2
@ এমেম্বার, ব্রাউজারটি সর্বদা তার সর্বোচ্চ সংখ্যক সমকালীন এজাক্সের সমান্তরালে রাখে। আপনি যদি ক্রিয়ায় দেখতে চান তবে নীচে আমার উত্তরটি ব্যবহার করে দেখুন
লুইস সিকোট

103

এ নেটওয়ার্কের ফলাফল Browserscope আপনি উভয় দেব প্রতি হোস্টনাম সংযোগ এবং সর্বাধিক সংযোগ জনপ্রিয় ব্রাউজার জন্য। "বন্য মধ্যে" ব্যবহারকারীদের উপর পরীক্ষা চালিয়ে ডেটা সংগ্রহ করা হয়, তাই এটি আপ টু ডেট থাকবে।


3
দুর্ভাগ্যক্রমে এটি দূরবর্তী থেকে আপ টু ডেট দেখাচ্ছে না
ডেভ লরেন্স

@ ডেভলরেন্স আমি সন্ধান করেছি এবং সম্পূর্ণ ডেটা সেটটিতে Chrome 60 এবং 61 রয়েছে যা আপ টু ডেট।
সাইমন পূর্ব

24

আই 6 / / আই। এর সাহায্যে রেজিস্ট্রিটিতে সমবর্তী অনুরোধগুলির সংখ্যা ঝাঁকুনি দেওয়া যায়। একে একে চারটিতে সেট করার পদ্ধতি এখানে।

[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। এছাড়াও, এটি ব্যবহারিক নয় যেহেতু প্রতিটি ক্লায়েন্টের জন্য একজনকে এটি করতে হবে।
রেজার্ট

23
তবে এটি এই সমস্যা সম্পর্কিত, এটি জানার জন্য খুব দরকারী জিনিস। একটি উত্তর হিসাবে সম্ভবত এটি ভাল পোস্ট করা হত?
জেডি স্মিথ

7

আমি কেবল www.browsercope.org এবং IE9 এবং Chrome 24 এর সাথে চেক করেছি আপনার একক ডোমেনে 6 টি সমবর্তী সংযোগ থাকতে পারে এবং একাধিক সংখ্যক 17 টি পর্যন্ত।


6

আইই 9 অনুসারে - কী পরিবর্তন হয়েছে? এইচটিপিওয়াচ ব্লগে, আইপি 9 এখনও ভিপিএন দিয়ে গেলে 2 সংযোগের সীমা রয়েছে।

একটি ভিপিএন স্টিল ক্লোবার্স IE 9 পারফরম্যান্স ব্যবহার করা

আমরা ইতিপূর্বে IE 8-তে সর্বাধিক সংখ্যার সমকালীন সংযোগগুলির স্কেলিং ব্যাক সম্পর্কে প্রতিবেদন করেছি যখন আপনার পিসি একটি ভিপিএন সংযোগ ব্যবহার করে। এমনকি ব্রাউজার ট্র্যাফিক যদি সেই সংযোগটি না করে তবে এটি ঘটেছিল।

দুর্ভাগ্যক্রমে, আই 9 9 একইভাবে ভিপিএন সংযোগ দ্বারা প্রভাবিত:


6

আমি একটি একক ফাইল এজেএক্স পরীক্ষক লিখেছি। উপভোগ কর!!! কেবলমাত্র আমার হোস্টিং সরবরাহকারীর সাথে আমার সমস্যা হয়েছে

<?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 এর অর্থ সারি এবং ডাব্লু ওয়েটিং টাইম।
যখন আপনি প্রাথমিকভাবে প্রারম্ভিক বোতামটি 80 টি (বা অন্য কোনও সংখ্যা) চাপুন সাম্প্রতিক এজাক্স অনুরোধটি জাভাস্ক্রিপ্ট দ্বারা চালু করা হয়, তবে যেমনটি জানা যায় সেগুলি ব্রাউজার দ্বারা ছড়িয়ে দেওয়া হয়। এছাড়াও তাদের সমান্তরালে সার্ভারের কাছে অনুরোধ করা হয়েছে (নির্দিষ্ট সংখ্যায় সীমাবদ্ধ, এটি এই প্রশ্নের সত্য)। এখানে অনুরোধগুলি এলোমেলো বিলম্বের সাথে সার্ভারের পাশে সমাধান করা হবে (ডাব্লু দ্বারা প্রতিষ্ঠিত)। শুরুর সময়ে সমস্ত অজ্যাক্স কলগুলি সমাধান করার জন্য প্রয়োজনীয় সমস্ত সময় গণনা করা হয়। পরীক্ষা শেষ হয়ে গেলে, আপনি দেখতে পাচ্ছেন যে এটি অর্ধেক সময় নিয়েছে, তৃতীয় হয়েছে, মোট সময়ের এক-চতুর্থাংশ, ইত্যাদি নিয়েছে, সার্ভারের কলগুলিতে সমান্তরালতাটি কেটেছিল। এটি কঠোর বা সুনির্দিষ্ট নয়, তবে কীভাবে আজাক্স কলগুলি সম্পন্ন হয় (আসন্ন ক্রসটি দেখে) রিয়েল টাইমে দেখতে সুন্দর। এবং এজাক্স বেসিকগুলি দেখানোর জন্য একটি খুব সাধারণ স্ব-রচিত স্ক্রিপ্ট।
অবশ্যই, এটি ধরে নিয়েছে, সেই সার্ভার পক্ষটি কোনও অতিরিক্ত সীমা প্রবর্তন করছে না।
ফায়ারব্যাগ নেট প্যানেল (বা আপনার ব্রাউজারের সমতুল্য) এর সাথে একযোগে ব্যবহার করুন


সুতরাং আমি নিশ্চিত করছি, এফএফ 3 ছয়টি সমবর্তী অনুরোধগুলি প্রবর্তন করে
লুইস সিকোট

আপনি এখানে কি করেছেন দয়া করে ব্যাখ্যা করতে পারেন? আর আর ডাব্লু কী? বিশ্লেষণের ফলাফলের মুদ্রণ স্ক্রিনটি অনেক প্রশংসা হবে
রই নমির

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 পর্যন্ত অনুরোধ থাকতে পারে

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 বলে, এটি কি ভেঙে গেছে?
PauAI

ফায়ারফক্স বিকাশকারী সংস্করণ 57.0b12 বলছে 2
অ্যান্থনিবি

0

আমি বিশ্বাস করি যে ব্রাউজারগুলি একই ডোমেনে তৈরি করবে সর্বাধিক সংখ্যক একযোগে থাকা http অনুরোধ রয়েছে, যা ব্যবহারকারীর সেটিংস এবং ব্রাউজারের উপর নির্ভর করে 4-8 টি অনুরোধের ক্রম অনুসারে।

আপনি বিভিন্ন ডোমেনে যাওয়ার জন্য আপনার অনুরোধগুলি সেট আপ করতে পারেন, যা সম্ভবত সম্ভব এবং নাও হতে পারে। ইয়াহু ছেলেরা এই অঞ্চলে প্রচুর গবেষণা করেছে, যা আপনি ( এখানে ) পড়তে পারেন । মনে রাখবেন যে প্রতিটি নতুন ডোমেন আপনি যুক্ত করেন তার জন্য একটি ডিএনএস লুকও প্রয়োজন। সমান্তরাল অনুরোধ এবং ডিএনএস লুপআপের মধ্যে ভাল সমঝোতা অর্জনের জন্য ওয়াইস্লো ছেলেরা 2 থেকে 4 টি ডোমেনের মধ্যে সুপারিশ করে, যদিও এটি পৃষ্ঠার লোডিং সময়ের উপর দৃষ্টি নিবদ্ধ রাখছে, পরবর্তী এজেএক্স অনুরোধগুলি নয়।

আমি জিজ্ঞাসা করতে পারি আপনি এত অনুরোধ করতে চান কেন? ব্রাউজারগুলি একই ডোমেনে অনুরোধের সংখ্যা সীমিত করার জন্য যথেষ্ট কারণ রয়েছে। আপনি যদি সম্ভব হয় তবে বান্ডিলিংয়ের অনুরোধগুলি আরও ভাল করবেন।


1
আমার এক্সএমএলএইচটিপি অনুরোধগুলি একই উত্স নীতিমালার কারণে আপনার প্রস্তাব অনুসারে বিভিন্ন ডোমেনে যেতে পারে না। (সম্ভবত এই সমস্যাটি ঘটার জন্য jsonp ব্যবহার করার পক্ষে এটি একটি যুক্তি)) এই পৃষ্ঠাটি অনেকগুলি কম্পিউটারের জন্য একটি কমান্ড-এবং-নিয়ন্ত্রণ ড্যাশবোর্ড; এইভাবে ব্যবহারকারীর দ্বারা অনুরোধ কার্যকরভাবে কার্যকর করা হয়।
মাইকেল গুন্ডল্যাচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.