2012-12-19 30 views
7

मेरे कोड को ऑप्टोमाइज़ करने के तरीकों की तलाश में, मैं this jsPerf test पर हुआ। फ़ंक्शन कॉल की धीमी गति के बारे में मेरी धारणा के अलावा किसी और चीज की अपेक्षा नहीं की गई, आईई 9 के साथ मेरे नतीजों ने मुझे वास्तव में एक लूप के लिए फेंक दिया। कोड कॉल फ़ंक्शन कॉल का उपयोग तेज था, लेकिन केवल इस ब्राउज़र पर था। मैंने इसे एक ही परिणाम के साथ कई बार भाग लिया। मैं नहीं देख सकता कि परीक्षण गलत तरीके से स्थापित किया गया था। इस अजीब परिणाम के कारण क्या हो सकता है?आईई फ़ंक्शन कॉल के साथ तेजी से परिचालन कर रहा है?

मेरे उपयोगकर्ता एजेंट Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0 है Windows सर्वर पर चल रहा है 2008.

+0

विषम, आईई 10 ऐसा नहीं करता है। – vcsjones

+0

बस पुष्टि की कि यह केवल आईई 9 चीज है। इसे एक और कंप्यूटर पर फिर से कोशिश की। –

+1

टैब प्रक्रिया 32 बिट या 64 बिट थी? स्क्रिप्ट डिबगिंग सक्षम या अक्षम था? यदि आप कभी भी परीक्षण के * परिणाम * का उपयोग करते हैं (उदाहरण के लिए पूरी चीज को अनुकूलित करने से रोकें) – EricLaw

उत्तर

4

अस्वीकरण: मैं jsPerf.com के निर्माता हूँ।

var i = 0; 
for (i = 0; i < 1000; i++) { 
    test() 
} 

क्यों for पाश में शामिल हैं:


आपका पहला परीक्षण पीछा कर रहा है? यह केवल परिणाम को छोड़ देता है। jsPerf स्वचालित रूप से परीक्षण कोड दोहराता है जब तक कि यह सांख्यिकीय रूप से महत्वपूर्ण परिणाम प्राप्त करने के लिए पर्याप्त परीक्षण नहीं करता। आदर्श रूप से, जेएसपीआरएफ परीक्षण यथासंभव कॉम्पैक्ट होते हैं, और केवल परीक्षण करें कि आप वास्तव में परीक्षण करना चाहते हैं। इस मामले में, आप for लूप प्रदर्शन में रुचि नहीं रखते हैं - आप बस यह जानना चाहते हैं कि कोड को कॉल करने से कोड को तेज करना है या नहीं।

यदि आप मजबूत जेएसपीआरएफ परीक्षण मामलों, check out my #jsconfeu2011 presentation बनाने पर अन्य युक्तियों में रुचि रखते हैं।

नोट: मैं अनावश्यक नहीं कह रहा हूं कि for लूप यही कारण है कि आप यह परिणाम क्यों देख रहे हैं। यह एक कारक हो सकता है, लेकिन कुछ और हो सकता है जो परिणाम को आगे बढ़ाए। This might be IE9’s “dead code removal” feature kicking in.

वैसे भी, मैंने आपके जेएसपीआरएफ परीक्षण को फोर्क किया है, लूप हटा दिए हैं, और मृत कोड उन्मूलन अनुकूलन से बचने के प्रयास में वैश्विक चर बना दिया है। http://jsperf.com/function-calls-vs-inline/3 क्या आप IE9 में इसका परीक्षण कर सकते हैं? इस समय मेरे पास आईई 9 वीएम आसान नहीं है।

+0

मेरे पास अभी आईई 9 के साथ मेरी मशीन तक पहुंच नहीं है, लेकिन शायद और भी अजीब बात यह है कि क्रोम अब फंक्शन कॉल के साथ तेजी से काम कर रहा है। –

+0

@ ट्रेकेउन: दिलचस्प, मैं क्रोम 28 में परिणाम पुन: उत्पन्न कर सकता हूं, लेकिन क्रोम 30 कैनरी में नहीं। यह वी 8 संस्करण में एक झुकाव हो सकता है जो क्रोम 28 के साथ भेज दिया गया था। कुछ समय पहले कुछ ऐसा हुआ - कुछ बिंदु पर, एक स्कोप लुकअप करना vn में एक स्कोप लुकअप करने से _not_ से तेज था: http://jsperf.com/ गुंजाइश-लुकअप –