2013-03-14 5 views
13

एक एडब्ल्यूएस उदाहरण पर थ्रू नोड.जेएस फेंक दिया और अनुरोध के समय का परीक्षण कर रहा था, कुछ दिलचस्प परिणाम प्राप्त हुए।नोड.जेएस प्रतिक्रिया समय

मैं सर्वर के लिए निम्नलिखित का प्रयोग किया:

var http = require('http'); 

http.createServer(function(req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.write('Hello World'); 
    res.end(); 
}).listen(8080); 

मैं इस सर्वर के लिए औसत 90ms देरी है, लेकिन कुल अनुरोध ~ 350 + एमएस लेता है। स्पष्ट रूप से बॉक्स पर बहुत समय बर्बाद हो गया है। मैंने सुनिश्चित किया कि परीक्षण से पहले DNS को कैश किया गया था।

मैंने सर्वर पर अपाचे बेंच 1000 की एक आवृत्ति के साथ किया - यह 4.3 सेकंड में 10,000 अनुरोध समाप्त कर दिया ... जिसका मतलब 4.3 मिलीसेकंड औसत है।

अद्यतन: बस grins के लिए, मैंने उसी मशीन पर अपाचे + PHP स्थापित किया और एक साधारण "हैलो वर्ल्ड" गूंज किया और औसतन 92 मिमी प्रतिक्रिया समय (दो पिंग पर) प्राप्त किया।

क्या वहां कोई सेटिंग है जहां मुझे याद आ रही है?

+1

आप कुल अनुरोध समय का आकलन कैसे किया? आपने 10000 अनुरोध समय को बेंचमार्क कैसे किया? –

+0

@AndreySidorov बस अनुरोध समय के लिए स्थानीय स्तर पर Chrome डेवलपर टूल का इस्तेमाल किया, मैं सर्वर के लिए एक अपाचे बेंच किया था। – Jonathan

+0

हे जोनाथन, तो निष्कर्ष है? ... नोड के साथ प्रतिक्रिया समय धीमा है? वास्तव में –

उत्तर

10

मुझे अपने खुद के सवालों का जवाब देने से पूरी तरह से नफरत है, लेकिन मैं भविष्य के पाठकों के साथ जो खोजा है उसके साथ गुजरना चाहता हूं।

tl; dr: res.write() के साथ कुछ गड़बड़ है। Express.js या res.end का उपयोग करें()

मुझे अभी परीक्षणों का एक गुच्छा आयोजित करने के माध्यम से मिला है। मैं कई प्रकार के नोड सर्वर सेट करता हूं और PHP और Nginx जैसी चीजों में मिश्रित हूं। मेरे निष्कर्ष यहाँ हैं।

जैसा कि पहले बताया गया था, स्निपेट के साथ मैंने ऊपर शामिल किया था, मैं लगभग 250ms/अनुरोध खो रहा था, लेकिन अपाचे बेंचमार्क ने उन मुद्दों को दोहराना नहीं था। मैं फिर एक PHP परीक्षण करने के लिए आगे बढ़ गया और पिंग पर 2ms - 20ms से लेकर परिणाम प्राप्त हुए ... एक बड़ा अंतर।

इसने कुछ और शोधों को प्रेरित किया, मैंने एक निग्नक्स सर्वर शुरू किया और इसके माध्यम से नोड को प्रॉक्सी किया, और किसी भी तरह, जादूगर ने 250 मिमी से 15ms तक प्रतिक्रिया को बदल दिया। मैं उस PHP स्क्रिप्ट के बराबर था, लेकिन यह वास्तव में भ्रमित परिणाम है। आम तौर पर अतिरिक्त होप्स चीजों को धीमा कर देंगे।

जानबूझकर, मैंने एक एक्सप्रेस.जेएस सर्वर भी बनाया - और कुछ और भी दिलचस्प हुआ, पिंग अपने आप पर 2 एमएमएस था। मैंने थोड़ी देर के लिए स्रोत में चारों ओर खोला और देखा कि इसमें res.write() कमांड की कमी है, बल्कि यह सीधे res.end() पर चला गया। मैंने res.write से "हैलो वर्ल्ड" को हटाने का एक और सर्वर शुरू किया और इसे res.end में जोड़ा और आश्चर्यजनक रूप से, पिंग पिंग पर 0ms थी।

मैंने कुछ खोज किया, यह देखना चाहता था कि यह एक प्रसिद्ध मुद्दा था और इस SO प्रश्न में आया, जिसकी एक ही समस्या थी।nodejs response speed and nginx

कुल मिलाकर, सामान intresting। सुनिश्चित करें कि आप अपने प्रतिक्रियाओं को अनुकूलित करें और इसे एक साथ भेजें।

हर किसी के लिए बेस्ट ऑफ लक

!

+0

धन्यवाद आदमी! अच्छा कार्य :-) –

14

जबकि क्रोम डेवलपर टूल्स फ्रंट एंड प्रदर्शन की जांच करने का एक अच्छा तरीका है, यह आपको वास्तविक सर्वर समय/सीपीयू लोड का बहुत मोटा अनुमान देता है। यदि आपके पास देव उपकरण में ~ 350 एमएस कुल अनुरोध समय है, तो इस नंबर से घटाएं DNS लुकअप + कनेक्टिंग + भेजना + प्राप्त करना, फिर राउंडट्रिप समय घटाएं (9 0 एमएस?) और उसके बाद आपके पहले अनुमान हैं। आपके मामले में मैं वास्तविक अनुरोध समय उप-मिलीसेकंड होने की अपेक्षा करता हूं। सर्वर पर इस कोड को चलाने के लिए प्रयास करें:

var http = require('http'); 
function hrdiff(t1, t2) { 
    var s = t2[0] - t1[0]; 
    var mms = t2[1] - t1[1]; 
    return s*1e9 + mms; 
} 
http.createServer(function(req, res) { 
    var t1 = process.hrtime(); 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.write('Hello World'); 
    res.end(); 
    var t2 = process.hrtime(); 
    console.log(hrdiff(t1, t2)); 
}).listen(8080); 

ab परिणाम के आधार पर आप औसत भेजने + अनुरोध का अनुमान + पर सबसे 4.2 एमएस (4200 एमएस/10000 अनुरोध) (आप इसे सर्वर पर चला होने के लिए समय दिया जाना चाहिए? क्या concurrency?)

+1

+1 एक बुद्धिमान जवाब के लिए के साथ पिंग से अधिक 1-2ms की एक प्रतिक्रिया हो रही थी। सब बहुत दिलचस्प है। अपने स्थानीय परीक्षण में, डीएनएस, कैश की गई थी, इसलिए पिंग के बिना, अनुरोध 260ms ले गया - स्निपेट आपके के अनुसार, इस के लिए औसत अनुरोध के आसपास 0.6 मिलीसेकंड है। अब, मैंने इसे सर्वर पर 1000 पर समेकन के साथ किया था। ** उन संख्याओं को समझ में आता है, लेकिन जब भी 260ms ** – Jonathan

+2

की बात आती है तो मैं अभी भी एक नुकसान में हूं, और दिलचस्प रोचक संख्या, उसी बॉक्स पर अपाचे/PHP का परीक्षण , मुझे 92 एमएमएस (दो पिंग पर दो) का प्रतिक्रिया समय मिल रहा है। जबकि मैं अभी भी नोडजेएस लिपि पर लगभग 350 एमएमएस प्राप्त कर रहा हूं। मुझे लगता है कि मुझे कुछ याद आ रहा है ... – Jonathan

+0

मेरे पास अपाचे/PHP के साथ और क्लाइंट से मापते समय node.js के साथ बहुत ही समान परिणाम हैं। क्या आप https://github.com/mnot/htracr का उपयोग करके अधिक विस्तृत माप कर सकते हैं या बस tcpdump का उपयोग कर सकते हैं और अपने परिणाम पोस्ट कर सकते हैं? –

संबंधित मुद्दे