2012-09-16 24 views
5

मैं इस लेख को पढ़ रहा हूं: http://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-data-between-streams/ और धाराओं को समझने में कुछ मामूली समस्याएं हैं।नोडज स्ट्रीम स्ट्रीम बनाम कॉलबैक

उद्धरण:

"Suppose we want to develop a simple web application 
that reads a particular file from disk and send it to the browser. 
The following code shows a very simple and naïve implementation 
in order to make this happen." 

तो कोड नमूना इस प्रकार है के रूप में:

var readStream = fileSystem.createReadStream(filePath); 
readStream.on('data', function(data) { 
    response.write(data); 
}); 

readStream.on('end', function() { 
    response.end();   
}); 

हम ऊपर तरीका है कि क्यों लूं जब हम बस कर सकता है:

fs.readFile(filePath, function(err, data){ 
    response.write(data); 
    response.end(); 
}); 

मैं कब या क्यों स्ट्रीम का उपयोग करूंगा?

उत्तर

13

बड़ी फ़ाइलों के साथ काम करते समय आप स्ट्रीम का उपयोग करेंगे। कॉलबैक के साथ, सभी फाइल की सामग्री को एक बार में स्मृति में लोड किया जाना चाहिए, जबकि स्ट्रीम के साथ, किसी भी समय फ़ाइल का केवल एक हिस्सा स्मृति में है।

इसके अलावा, स्ट्रीम इंटरफ़ेस तर्कसंगत रूप से अधिक सुरुचिपूर्ण है। स्पष्ट रूप से data, drain, और end कॉलबैक संलग्न करने के बजाय, आप के बजाय pipe उपयोग कर सकते हैं:

var readStream = fileSystem.createReadStream(filePath); 
readStream.pipe(response); 
5

एक बड़ा कारण यह है कि इससे पहले कि आप यह सब स्मृति में है डेटा पर काम कर रही शुरू कर सकते हैं। "स्ट्रीमिंग वीडियो" सोचें, जहां आप अभी भी लोड होने के दौरान एक क्लिप देखना शुरू कर सकते हैं। कई उपयोग मामलों में, एक स्ट्रीम आपको पूरी चीज़ को लोड करने से पहले फ़ाइल से डेटा प्रोसेस करने की अनुमति देगी।

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

स्पष्ट रूप से कई जटिल उपयोग के मामले हैं, और अभी भी कई बार हैं जहां कॉलबैक अभी भी सादगी के लिए अधिक समझ में आता है (जैसे कि आपको कुल समय "खरगोश" दिखाई देने की आवश्यकता होती है, इस मामले में आपके पास वैसे भी पूरी फाइल लोड करने के लिए)।

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