2013-02-13 43 views
6

मैं एक ऐसी स्क्रिप्ट को कार्यान्वित करना चाहता हूं जो किसी भी अतिरिक्त प्लगइन (जावा इत्यादि) के बिना नियमित ब्राउज़र का उपयोग कर क्लाइंट से मेरे सर्वर (= रिमोट यूआरएल) के प्रतिक्रिया समय को माप सके।सर्वर प्रतिक्रिया समय मापना (क्लाइंट-साइड)

मैं केवल नेटवर्क गति (प्रतिक्रिया समय) पर देख रहा हूँ, नहीं पेज लोड हो रहा है गति

मापने के लिए आप मुझे क्या सलाह देंगे? इसे आईसीएमपी (पिंग) जैसे कुछ और नहीं, टीसीपी/आईपी पर चलाना है।

आप ग्राहक पक्ष पर कार्यान्वयन के आसपास कैसे जाएंगे? मैं जावास्क्रिप्ट (JQuery) का उपयोग करना पसंद करूंगा।


अद्यतन: मैं एक क्रॉस डोमेन की जांच की जरूरत के रूप में, ajax कॉल एक विकल्प

इसके अलावा, ajax विधि बिल्कुल सटीक प्रतीत नहीं होता है होने के लिए नहीं है। प्रतीत होता है कि परिणाम लगभग 50 एमएमएस (यह लगभग स्थिर मूल्य है, चाहे डोमेन क्या है - मुझे लगता है कि यह प्रसंस्करण समय है) परीक्षण मशीन पर फायरबग

+0

आपका मतलब है [इस तरह] [http://stackoverflow.com/questions/3498503/find-out-how-long-an-ajax-request-took-to-complete?lq=1)? – Carsten

+0

हां लेकिन जहां तक ​​मुझे पता है jQuery.get एचटीएमएल कोड सहित पूरी प्रतिक्रिया देता है। उस स्थिति में साइट की गति प्रतिक्रिया समय को प्रभावित करेगी। मैं पिंग की तरह कुछ ढूंढ रहा हूं। संपादित करें: इसके अलावा, JQuery हो सकता है (मैं इससे परिचित नहीं हूं) कॉलबैक को कॉल करने से पहले अन्य कोड पर कॉल करें जो मापने की विधि को प्रभावित करेगा – Kraken

+0

इस समस्या के बारे में पढ़ना, ऐसा लगता है कि जावास्क्रिप्ट/jquery से क्रॉस डोमेन कॉल खो गया है कारण।जेएसओएनपी और प्रॉक्सी का जवाब लगता है, और ऐसा करके कि आपका प्रतिक्रिया समय अब ​​मूल्य का नहीं है। –

उत्तर

1

से संसाधन की तुलना में हमेशा mysite.net/speedtest जैसे यूआरएल पर एक खाली 200 ठीक प्रतिक्रिया देता है। तो कुछ की तरह:

var startTime = (new Date()).getTime(), 
    endTime; 

$.ajax({ 
    type:'GET', 
    url: 'http://mysite.net/speedtest', 
    async: false, 
    success : function() { 
     endTime = (new Date()).getTime(); 
    } 
}); 

alert('Took ' + (endTime - startTime) + 'ms'); 

है कि आप समय यह आपके सर्वर करने के लिए एक अनुरोध भेजने के लिए ले जाता है दे देंगे, के साथ साथ समय यह आपके सर्वर लेता संसाधनों का न्यूनतम सेट यह एक अनुरोध का जवाब देने की आवश्यकता है लोड करने के लिए।

नया: आपका प्रश्न अब आपके द्वारा जोड़े गए अतिरिक्त जानकारी के साथ असंगत है। आप क्लाइंट के पिंग को उस यूआरएल पर प्राप्त करना चाहते हैं जिसे आप नियंत्रित नहीं करते हैं - यह आपके द्वारा शुरुआती पूछे जाने वाले प्रश्नों की तुलना में काफी अलग बात है, से सर्वर से प्रतिक्रिया समय प्राप्त करना। यदि आप अपने सर्वर पर क्लाइंट की पिंग प्राप्त करने का प्रयास कर रहे हैं, तो एजेक्स कॉल चाल करेगा। यदि आप अपने पिंग को किसी अन्य सर्वर पर प्राप्त करने का प्रयास कर रहे हैं, तो मैं थोड़ा उलझन में हूं कि आपका लक्ष्य क्या है।

+0

AJAX अनुरोध समाप्त होने से पहले यह चेतावनी देगा। –

+0

@RobertFricke ओह, आप सही हैं। मैंने इसे ठीक किया, नोट के लिए धन्यवाद। – AmericanUmlaut

+0

ठंडा सेम। हालांकि, इसे देखते हुए, 'एंडटाइम' सही ढंग से सेट किया गया है, लेकिन 'अलर्ट' अभी भी' सफलता 'कॉलबैक से पहले चलता है क्योंकि यह अजाक्स-कॉल के बाद सीधे निष्पादित होगा (कॉलबैक से पहले)। –

7

तुम सिर्फ एक अनुरोध समय की जरूरत है:

var sendDate = (new Date()).getTime(); 

$.ajax({ 
    //type: "GET", //with response body 
    type: "HEAD", //only headers 
    url: "/someurl.htm", 
    success: function(){ 

     var receiveDate = (new Date()).getTime(); 

     var responseTimeMs = receiveDate - sendDate; 

    } 
}); 
+0

प्रतिक्रिया टाइमम आपके दायरे के बाहर दिखाई नहीं दे रहा है सफलता समारोह – AmericanUmlaut

+0

हां लेकिन जहां तक ​​मुझे पता है यह एचटीएमएल कोड सहित पूरी प्रतिक्रिया देता है। उस स्थिति में साइट की गति प्रतिक्रिया समय को प्रभावित करेगी। क्या मैं सही हू? – Kraken

+1

यदि आप नहीं चाहते हैं कि सर्वर प्रतिक्रिया निकाय लौटाए, तो 'टाइप: "HEAD" 'का उपयोग करें, और केवल हेडर लौटाए जाएं। –

0
var startTime = (new Date()).getTime(), 
    endTime; 
$.ajax({ 
type: "GET", 
url: "test.html", 
dataType: "html", 
success:function(data){ 
endTime = (new Date()).getTime(); 
} 
}); 

अब अंतर ले।

0

आप इसे बहुत आसान कर सकते हैं।

var t = Date.now(); 
var t2; 
$.ajax({ 
    url:'page', 
    success:function(){ 
     t2 = Date.now(); 
     console.log(t2-t);//the time needed to do the request 
    } 
}); 

अनुरोध करने का पृष्ठ अतिरिक्त लोड समय की नकल करने के लिए खाली होना चाहिए।

+0

यह बात है, मैं इसे खाली नहीं कर सकता। वैसे भी, मुझे लगता है कि अगर मैं @RobertFricke समाधान का उपयोग कर हेडर का अनुरोध करता हूं तो मैं इस समस्या के आसपास जा सकता हूं – Kraken

+1

@kraken हाँ आप केवल हेडर प्राप्त कर सकते हैं और समस्या हल हो जाती है। – Licson