2012-09-14 6 views
7

एक त्वरित सवाल। मैं बेंचमार्क (नीचे दिए गए लिंक) बनाया है, और मेरे लिए कम से कम (क्रोम 18.0.1025 चल), array.shift (उपयोग करते हुए) हर बार उल्लेखनीय तेजी से एक का उपयोग करते समय मूल्यों को पढ़ने/के लिए की तुलना में लगता है एक सरणी के सामने से मूल्यों को पढ़ने लूप और इंडेक्स द्वारा उन्हें एक्सेस करना।जावास्क्रिप्ट: क्यों इस बेंचमार्क शो array.shift() सरणी से [i] एक सरणी से मानों बंद पढ़ने पर ऐसा बहुत तेजी से होने के लिए करता है?

मुझे यकीन है कि यह सही नहीं हो सकता है, क्योंकि शिफ्ट() के पास बहुत कुछ काम है, लेकिन साथ ही मैं यह नहीं देख सकता कि मैं इस अंतर के लिए क्या गलत कर सकता था?

http://jsperf.com/some-array-reading-comparisons

पढ़ने के लिए धन्यवाद, जेम्स

उत्तर

7

आप परीक्षण प्रति अपने सरणी की स्थापना कर रहे हैं केवल एक बार, और इस प्रकार केवल shift टेस्ट की पहली यात्रा के साथ काम करने के लिए किसी भी डेटा है। अगले पुनरावृत्तियों में पहले पुनरावृत्ति से छोड़ा गया खाली सरणी है, और तुरंत समाप्त हो जाती है।

Here is the fixed test suite, जहां परिवर्तनशील एल्गोरिदम डेटा की एक प्रतिलिपि पर काम करते हैं। shift एल्गोरिथ्म जाहिर प्रदर्शन में पिछले आता है।

+1

निष्पक्षता के लिए आप सूचकांक भी का उपयोग करने वालों के लिए सरणी कॉपी करना होगा। – kennytm

+0

सच है। टेस्ट सूट अपडेट किया गया है, 'शिफ्ट' अभी भी आखिरी है। – lanzz

+0

धन्यवाद, यह मेरा प्रारंभिक संदेह था। मैं इस धारणा के तहत था कि प्रत्येक कोड से पहले सेटअप कोड प्रत्येक पुनरावृत्ति से पहले चलाया गया था :) – jsdw

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