मैं एक्सप्रेस के साथ एक नोड.जेएस ऐप चला रहा हूं और अपना प्रदर्शन बढ़ाने शुरू करना चाहता हूं। कई मार्ग परिभाषित किए गए हैं। आइए एक मूल उदाहरण है:node.js प्रदर्शन अनुकूलन और एकल थ्रेडेड आर्किटेक्चर
app.get('/users', function (req, res) {
User.find({}).exec(function(err, users) {
res.json(users);
}
});
मान लीजिए कि हमारे पास 3 क्लाइंट ए, बी और सी हैं, जो इस मार्ग का उपयोग करने का प्रयास करते हैं। उनके अनुरोध सर्वर पर ए, बी, सी क्रम में 1 मिलीसेकंद अंतर के साथ आते हैं।
1. यदि मैं node.js आर्किटेक्चर सही ढंग से समझता हूं, तो प्रत्येक अनुरोध तुरंत संभाला जाएगा, क्योंकि Users.find()
असीमित है और गैर-अवरुद्ध कोड है?
के एक तुल्यकालिक कॉल के साथ इस उदाहरण का विस्तार करते हैं:
app.get('/users', function (req, res) {
var parameters = getUserParameters();
User.find({parameters}).exec(function(err, users) {
res.json(users);
}
});
एक ही अनुरोध, उसी क्रम। getUserParameters()
पूरा करने के लिए 50 मिलीसेकंड लेता है।
2. ए रूट कॉलबैक-फ़ंक्शन में प्रवेश करेगा और 50 मिलीसेकंड के लिए node.js धागा को ब्लॉक करेगा। बी और सी समारोह में प्रवेश करने में सक्षम नहीं होंगे और प्रतीक्षा करनी होगी। जब कोई getUsersParameters()
समाप्त करता है तो यह एसिंक्रोनस User.find()
फ़ंक्शन के साथ जारी रहेगा और बी अब रूट कॉलबैक-फ़ंक्शन दर्ज करेगा। सी को अभी भी 50 और मिलीसेकंड का इंतजार करना होगा। जब बी एसिंक्रोनस फ़ंक्शन में प्रवेश करता है, तो सी के अनुरोधों को अंततः संभाला जा सकता है। एक साथ लिया गया: सी को खत्म करने के लिए 50 मिलीसेकंड का इंतजार करना है, बी के लिए 50 मिलीसेकंड खत्म करने के लिए 50 मिलीसेकंड और खुद को समाप्त करने के लिए 50 मिलीसेकंड (सादगी के लिए, हम एसिंक्रोनस फ़ंक्शन के लिए प्रतीक्षा समय को अनदेखा करते हैं)?
अब मानते हैं कि हमारे पास एक और मार्ग है, जो केवल एक व्यवस्थापक द्वारा सुलभ है और हर मिनट क्रोंटब के माध्यम से बुलाया जाएगा।
app.get('/users', function (req, res) {
User.find({}).exec(function(err, users) {
res.json(users);
}
});
app.get('/admin-route', function (req, res) {
blockingFunction(); // this function takes 2 seconds to complete
});
3. जब एक अनुरोध एक्स हिट admin-route
और blockingFunction()
कहा जाता है, होगा ए, बी और सी, कौन सही एक्स के अनुरोध के बाद /users
फोन करेगा, जब तक वे भी मार्ग कॉलबैक-समारोह में प्रवेश 2 सेकंड प्रतीक्षा करने के लिए है ?
4. क्या हमें प्रत्येक स्वयं परिभाषित फ़ंक्शन बनाना चाहिए, भले ही इसमें केवल 4 मिलीसेकंड हों, कॉलबैक के साथ एक असीमित फ़ंक्शन के रूप में?
इस सवाल का अप्रासंगिक लेकिन मैंने सुना है एक्सप्रेस मर चुका है। – WitVault
नोड/जेएस में 'अवरोधन समारोह' क्या होगा? अफैक, सब कुछ घटना लूप के आसपास मॉडलिंग किया गया है। – Tobias