मैं सी # गणना-जैसी कार्यक्षमता को आजमाने और कार्यान्वित करने के लिए जावास्क्रिप्ट मॉड्यूल पैटर्न का उपयोग कर रहा हूं। मेरे पास दो तरीकों से है कि मैं वर्तमान में इस कार्यक्षमता को लागू करने के बारे में सोच रहा हूं लेकिन मुझे दूसरे के विपरीत एक ही तरीके से सभी लाभ या फायदे नहीं समझते हैं।जावास्क्रिप्ट मॉड्यूल पैटर्न मेमोरी पदचिह्न और प्रदर्शन
var MyApp = (function (app) {
// Private Variable
var enums = {
ActionStatus: {
New: 1,
Open: 2,
Closed: 3
}
};
// Public Method
app.getEnum = function (path) {
var value = enums;
var properties = path.split('.');
for (var i = 0, len = properties.length; i < len; ++i) {
value = value[properties[i]];
}
return value;
};
return app;
})(MyApp || {});
// Example usage
var status = MyApp.getEnum("ActionStatus.Open");
और अब कार्यान्वयन 2:
var MyApp = (function (app) {
// Public Property
app.Enums = {
ActionStatus: {
New: 1,
Open: 2,
Closed: 3
}
};
return app;
})(MyApp || {});
// Example usage
var status = MyApp.Enums.ActionStatus.Open;
मुख्य अंतर यह एक "सार्वजनिक" संपत्ति बनाम एक "निजी" चर का उपयोग कर enums स्टोर करने के लिए में है
यहाँ कार्यान्वयन 1 है। मुझे लगता है कि कार्यान्वयन 1 थोड़ा धीमा है लेकिन मुझे यकीन नहीं था कि enums को "निजी" के रूप में रखने से स्मृति उपयोग कम हो जाता है। क्या कोई मेमोरी पदचिह्न और दो (यदि कोई हो) के प्रदर्शन में अंतर को समझा सकता है? कोई अन्य सुझाव/सलाह की सराहना की जाती है।
उत्तर देने के लिए समय और ES5 जानकारी के लिए धन्यवाद। क्या आप ब्राउजर मेमोरी मैनेजमेंट के संदर्भ में जानते हैं कि कैसे कार्यान्वयन 1 अपनी निजी संपत्ति बनाम कार्यान्वयन 2 की सार्वजनिक संपत्ति का भंडारण करता है? मैंने मेमोरी खपत को प्रोफाइल करने की कोशिश की लेकिन मुझे पता चला कि कार्यान्वयन 2 ने MyApp के ऑब्जेक्ट आकार को बड़ा बना दिया था जबकि कार्यान्वयन 1 नहीं था। लेकिन मुझे पता है कि कार्यान्वयन 1 को कहीं भी निजी चर के संदर्भ को स्टोर करना है। –
@steve_ut: यह ऑब्जेक्ट बनाने के लिए उपयोग किए जा रहे अज्ञात फ़ंक्शन को कॉल के * निष्पादन संदर्भ * के * परिवर्तनीय बाध्यकारी ऑब्जेक्ट * नामक कुछ (गहरी सांस) में संग्रहीत किया जाता है। * (whew) * :-) यह है [ES5 spec] (http://es5.github.com) शब्दावली ([कैनोलिक लिंक] (http://www.ecma-international.org/publications/standards/Ecma- 262.htm))। किसी फ़ंक्शन में प्रत्येक कॉल को एक परिवर्तनीय बाध्यकारी ऑब्जेक्ट मिलता है, जिसमें फ़ंक्शन, इसके स्थानीय वर्र्स और गुणों के रूप में कुछ अन्य चीजें हैं।पुरानी शब्दावली के साथ विवरण * [बंद जटिल नहीं हैं] (http://goo.gl/OzIQY) *। –
@steve_ut: या वास्तव में, अधिक सही होने के लिए, यह सामान्य मेमोरी पूल में संग्रहीत है और परिवर्तनीय बाध्यकारी ऑब्जेक्ट का संदर्भ है। यह आपके 'MyApp' ऑब्जेक्ट को देखने का भी सही तरीका है; 'MyApp' के आकार को मैप करने के लिए आप जो भी टूल उपयोग कर रहे हैं वह आपको कुछ सरल जानकारी दे रहा है। जावास्क्रिप्ट एक दूसरे के संदर्भ के साथ मेमोरी पूल में ऑब्जेक्ट्स के बारे में है। क्रियान्वयन 2 से 'MyApp' ऑब्जेक्ट वास्तव में * एप * एन्म्स' द्वारा संदर्भित ऑब्जेक्ट को कार्यान्वयन 1 से अधिक नहीं करता है। –