2011-12-05 11 views
5

मतभेद, पेशेवरों, याAS3 {} नए बनाम वस्तु

var obj = {}; 

की विपक्ष क्या वी.एस.

var obj = new Object(); 

सभी मुझे पता है कि दूसरे उदाहरण में अधिक समय लगता है। क्या कोई वास्तविक लाभ है?

** संपादित करें **

function loop() { 
    var start = (new Date()).getTime(); 
    for(var i = 0; i < 1000000; ++i) { 
     //var b = {}; // takes ~548ms on my machine 
     var b = new Object(); // takes ~287ms on my machine 
    } 
    trace((new Date()).getTime() - start); 
    setTimeout(loop, 1); 
} 
loop(); 

अगर आप स्विच var b = {}; और var b = new Object(); के बीच आप प्रदर्शन अंतर देखेंगे। वे मेरी यादों और प्रश्न में मैंने जो उल्लेख किया है उससे विपरीत हैं।

उत्तर

3

जहां तक ​​मुझे पता है, वे बराबर हैं। "दूसरे उदाहरण में अधिक समय लगता है", मुझे लगता है कि आप केवल वक्तव्य टाइप करने के लिए, और संभवतः मूल्यांकन करने के लिए संभवत: अतुलनीय समय का मतलब है - लेकिन निष्पादन समय बराबर होना चाहिए।

+0

आपके उत्तर ने मुझे स्पीड टेस्ट को फिर से चलाने के लिए उत्तेजित किया। मेरे निष्कर्ष मेरे प्रश्न के लिए एक संपादन में पोस्ट किए गए हैं। – Jacksonkr

+0

मैं आपकी परीक्षा को कई बार फिर से चलाऊंगा, प्रत्येक भिन्नता के लिए 25 गुणा की तरह कुछ - पूरी तरह से नई प्रक्रियाओं में - फिर औसत ट्रैक करने और गणना करने के लिए स्प्रेडशीट का उपयोग करें। (बस यह सुनिश्चित करना नहीं चाहते कि आप माइक्रो-बेंचमार्क के आसपास कुछ सामान्य मिथकों में नहीं चल रहे हैं।) – ziesemer

3

कुछ परीक्षण मुझे बताते हैं कि new Object() एक उचित प्रतिशत तेज़ है, हालांकि यह केवल {} वाक्यविन्यास की तुलना में है, न कि किसी अन्य कार्य की बहुतायत के लिए।

परीक्षण समारोह:

function time(amount:int, test:Function):Number 
{ 
    var average:Number = 0; 
    var averages:Array = []; 

    for(var n:int = 0; n<amount; n++) 
    { 
     var start:Number = getTimer(); 

     test(); 

     averages[averages.length] = getTimer() - start; 
    } 

    for each(var a:Number in averages) average += a; 

    return average/averages.length; 
} 

तो हमारे दो परीक्षण विषयों:

function short():void 
{ 
    for(var i:int = 0; i<1000000; i++) var obj:Object = {}; 
} 

function long():void 
{ 
    for(var i:int = 0; i<1000000; i++) var obj:Object = new Object(); 
} 

और परिणाम:

trace(time(5, short)); // 278.6 
trace(time(5, long)); // 153.6 

वहाँ मोटे तौर पर एक 45% की गति new Object() का उपयोग कर वृद्धि, है, लेकिन आप देखेंगे कि कुल समय अभी भी अनजान है (यहां तक ​​कि 1,000,000 पुनरावृत्तियों के लिए भी) ।

व्यक्तिगत रूप से मैं अभी भी {} सिंटैक्स के साथ सादगी और अन्य व्यक्तिगत वरीयता कारणों के बीच सरलता के लिए चिपकने जा रहा हूं।