तो, मैं एक 2 डी जावास्क्रिप्ट भौतिकी सिमुलेशन प्रोग्रामिंग कर रहा हूँ। प्रदर्शन अच्छा है, लेकिन मैं इसे बेहतर बनाने के लिए अनुकूलन बनाने जा रहा हूं। इसलिए, क्योंकि कार्यक्रम बहुत भौतिक ज्यामिति के साथ काम करता है, मैं प्रोग्राम में कई पायथागोरियन प्रमेय गणना करता हूं। कुल मिलाकर, लगभग पांच गणना; एक साथ, वे प्रति सेकंड लगभग दस लाख बार चलाते हैं। इसलिए, मुझे लगा कि यह प्रदर्शन को बढ़ावा देगा अगर मैंने उस सरल पायथागोरियन प्रमेय कोड को एक नए समारोह में रखा और इसे बुलाया; आखिरकार, ब्राउजर के पास ऐसा करने के लिए कम संकलन है। तो, मैंने फ़ायरफ़ॉक्स में कोड चलाया और मिला .... 4000000% उस गणना के निष्पादन समय में बढ़ाएं।जेएस: फ़ंक्शन को कॉल करने में कितना समय लगता है?
कैसे? यह वही कोड है: Math.sqrt (x * x + y * y), तो फ़ंक्शन के रूप में इसे कैसे जोड़ना इसे धीमा कर देता है? मुझे लगता है कि कारण यह है कि कोड को निष्पादित किए बिना फ़ंक्शन को कॉल करने के लिए समय लगता है, और यह भी कि प्रति सेकंड इन देरी में से एक लाख इसे धीमा कर देता है?
यह मेरे लिए खतरनाक लगता है। क्या यह पूर्वनिर्धारित जेएस कार्यों पर भी लागू होगा? ऐसा असंभव लगता है, और यदि हां, तो वे इससे कैसे बचते हैं?
इस तरह जाने के लिए इस्तेमाल किया कोड:
function x()
{
dx=nx-mx;
dy=ny-my;
d=hypo(dx,dy);
doStuff(...
}
function hypo(x,y)
{
return Math.sqrt(x*x+y*y);
}
धन्यवाद:
function x()
{
dx=nx-mx;
dy=ny-my;
d=Math.sqrt(dx*dx+dy*dy);
doStuff(...
}
मैं क्या करने की कोशिश की इस था!
क्या आपका फ़ंक्शन उस दायरे से बाहर परिभाषित किया गया है जो एक लाख बार एक सेकंड में चलाया जा रहा है? – alex
और यह सच नहीं है कि ब्राउज़र में "करने के लिए कम संकलन" है क्योंकि आप इसे एक फ़ंक्शन में डालते हैं ... यह वास्तव में होना चाहिए, वास्तव में, क्योंकि संकलन एक स्टार्टअप चीज है। लेकिन @alex को शायद आपके 400% मंदी का कारण मिला :) – Ryan
@alex हां, यह मुख्य विंडो में परिभाषित किया गया है। – mindoftea