2013-04-17 12 views
6

किसी सरणी में डेटा तक पहुंचने के लिए मैंने enum-जैसी चर को फ़ील्ड में मानव पठनीय पहचानकर्ता बनाने के लिए बनाया है।एक जमे हुए "enum" धीमा क्यों है?

var columns = { first: 0, second: 1 }; 
var array = ['first', 'second']; 
var data = array[columns.first]; 

जब मुझे पता चला के बारे में Object.freeze मैं enum इतना है कि यह बदला नहीं जा सकता के लिए इसका उपयोग करना चाहता था, और मैं वी एम अपने लाभ के लिए इस जानकारी का उपयोग करने की उम्मीद।

जैसा कि यह पता चला है, परीक्षण क्रोम और नोड पर धीमे हो जाते हैं, लेकिन फ़ायरफ़ॉक्स पर थोड़ा तेज (संख्या द्वारा सीधे पहुंच की तुलना में)।

कोड यहाँ उपलब्ध है: http://jsperf.com/array-access-via-enum

यहाँ (JSPerf परीक्षण करने के लिए इसी) नोड से मानक हैं:

fixed Number: 12ms 
    enum: 12ms 
    frozenEnum: 85ms 

करता वी 8 बस अभी तक एक महान कार्यान्वयन नहीं, या वहाँ कुछ है मेरे उपयोग के मामले के लिए इस दृष्टिकोण के साथ suboptimal?

+1

ऐसा लगता है कि वी 8 का स्थिर कोड विश्लेषण काफी अच्छा है और निश्चित संख्याओं तक 'कॉलम' एनम पहुंच का अनुवाद करता है। यह 'जमे हुए' एनम ऑब्जेक्ट के साथ ऐसा नहीं करता है क्योंकि इसे 'ऑब्जेक्ट.फ्रीज़' द्वारा उत्परिवर्तित किया जाता है - एफएफ वहां चालाक लगता है। – Bergi

उत्तर

4

मैंने फ़ायरफ़ॉक्स 20 में अपने परीक्षण की कोशिश की, जो कि बोर्ड में बड़े पैमाने पर तेज़ है, और आईई 10 जो थोड़ा तेज और अधिक संगत है।

तो मेरा उत्तर है नहीं है, वी 8 अभी तक, एक महान कार्यान्वयन

+0

और कुछ तकनीकी कारणों से, नोड लोग कभी-कभी कुछ नई V8 सुविधा/सुधारों को कुछ समय के लिए रोक देते हैं। सुविधा में बदल सकता है। – TheHippo

1

नहीं है इस bugreport के अनुसार ठंड एक वस्तु वर्तमान में "शब्दकोश-मोड" है, जो धीमी है में कहते हैं।

तो प्रदर्शन में सुधार करने के बजाय, यह "enums"/छोटे सरणी के लिए एक निश्चित मंदी बन जाता है।

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