2012-04-15 11 views
9

पूरी कहानी के लिए, my other question देखें।वी 8 आंतरिक - बेनामी कार्यों का संचालन

असल में, मैं अगर यह अधिक निम्न कोड के लिए सॉकेट संचालकों में नामित कार्यों का उपयोग करने के लिए कुशल थे पूछा था:

var app = require('express').createServer() 
var io = require('socket.io').listen(app); 

app.listen(8080); 

// Some unrelated stuff 

io.sockets.on('connection', function (socket) { 
    socket.on('action1', function (data) { 
     // logic for action1 
    }); 

    socket.on('action2', function (data) { 
     // logic for action2 
    }); 

    socket.on('disconnect', function(){ 
     // logic for disconnect 
    }); 
}); 

समग्र जवाब था हाँ (अधिक जानकारी के लिए ऊपर लिंक देखें), लेकिन निम्नलिखित टिप्पणी ThiefMaster द्वारा पोस्ट किया गया:

मैं वी 8 आंतरिक से परिचित नहीं हूँ, लेकिन यह बहुत चालाक सिर्फ एक अलग संलग्न गुंजाइश के साथ एक बार समारोह संकलन और फिर से उपयोग यह हर करने के लिए, हो सकता है।

तो अब है कि मेरे सवाल है। क्या वी 8 एक बार अज्ञात कार्यों को संकलित करने के लिए पर्याप्त स्मार्ट है और उन स्थितियों में अलग-अलग क्षेत्रों के साथ उनका पुन: उपयोग करता है जहां अनाम कार्य सामान्य रूप से कई फ़ंक्शन उदाहरणों का निर्माण करते हैं? उदाहरण के लिए, ऊपर मैं action1, action2 के लिए के लिए connection घटना एक बार बनाया जाना हैंडलर लेकिन संचालकों उम्मीद होती है, और disconnect प्रत्येक कनेक्शन के लिए बनाया जाना। दूसरे प्रश्न में इसे नामित कार्यों के साथ हल किया गया था, लेकिन यदि मुझे वी 8 में आवश्यक है या यह कुछ अनुकूलन करेगा तो मुझे अधिक दिलचस्पी है।

+0

ध्यान दें कि इस समारोह के साथ इसका कोई लेना-देना नहीं है नामित या अनाम; यह करना है कि आप प्रत्येक कनेक्शन पर एक नया फ़ंक्शन बनाते हैं या नहीं। (उस पर और अधिक के लिए मेरा जवाब देखें।) –

उत्तर

6

हां। वी 8 मेलिंग सूची पर मैं asked a very similar question (एक कन्स्ट्रक्टर फ़ंक्शन के भीतर से फ़ंक्शन बनाने के लिए अपने मामले में संबंधित)। मैं जबाब मिला कि समारोह के कोड "... सामान्य रूप से पुन: उपयोग किया ..." है, वहाँ भले ही एक अलग समारोह वस्तु हर बार (के रूप में कल्पना के लिए आवश्यक)।


नोट, हालांकि, आपके प्रश्न का कोई नाम नहीं है कि फ़ंक्शन का नाम या अज्ञात है या नहीं।

io.sockets.on('connection', function handleConnection(socket) { 
    socket.on('action1', function (data) { 
     // logic for action1 
    }); 

    socket.on('action2', function (data) { 
     // logic for action2 
    }); 

    socket.on('disconnect', function(){ 
     // logic for disconnect 
    }); 
}); 

एक नामित समारोह अभिव्यक्ति है, जो पूरी तरह से वैध और V8 द्वारा सही तरह से प्रबंधित है का उपयोग करता है कि: अपने उदाहरण में समारोह एक नाम हो सकता था। (अफसोस की बात है, यह not handled correctly by IE8 and earlier है, जो पूरी तरह से अलग-अलग समय पर दो पूरी तरह से अलग-अलग कार्यों का निर्माण करता है। लेकिन जब आप वी 8 का उपयोग कर रहे हैं, तो आपको इसके बारे में चिंता करने की ज़रूरत नहीं है।)