2012-01-16 6 views
5

में मैथ ऑब्जेक्ट की गति मैं जावास्क्रिप्ट एप्लिकेशन पर काम कर रहा हूं जो गणित परिचालनों का गहन उपयोग करता है, प्रति माउस चालान के दर्जनों कॉल। मैं एक प्रारंभिक बिंदु के रूप में दूसरों के 'लोगों कोड पर काम किया गया है, और मैं अक्सर इस तरह के रूप में देशी जावास्क्रिप्ट गणित के लिए काम arounds, लगता है ...जावास्क्रिप्ट

var pi = Math.PI 
var distance = (x * x) + (y * y)/R * R 
var pixels = ~~(x/y) 

वहाँ मठ वस्तु का उपयोग कर के लिए एक महत्वपूर्ण प्रदर्शन हिट है ? यदि हां, तो कुछ सामान्य कामकाज क्या हैं?

+1

संभवतः 'गणित' विधियों को उस भाषा में कार्यान्वित किया जाता है जिसमें जावास्क्रिप्ट को लागू किया जाता है (यानी एक सामान्य ब्राउज़र में सी या सी ++) ताकि वे जावास्क्रिप्ट –

+5

में जो कुछ भी लिख सकें उससे कहीं अधिक तेज हो। ** क्या आपने ** ** प्रदर्शन में अंतर? अपने सभी लक्षित ब्राउज़रों में? –

+2

अच्छी तरह से 'मठ' में "दूरी" विधि नहीं है, और वह पूर्णांक रूपांतरण तेज़ हो सकता है लेकिन यह 'Math.floor() 'या' Math.round()' से भी अर्थात् अलग है। इस तरह की चीज का परीक्षण करने के लिए आप [jsperf] (jsperf.com) का उपयोग कर सकते हैं। – Pointy

उत्तर

15

आप कुछ जावास्क्रिप्ट में गहन सामान कंप्यूटिंग कर कारण के लिए हैं, तो आप उन चीजों को याद (* और पढ़ें डेविड Mandelin के आपका इंजन पता होना चाहिए: अपने जावास्क्रिप्ट फास्ट प्रस्तुति बनाने के लिए कैसे - PDF, जहां वह और अधिक में यह वर्णन करता है विवरण *):

  1. इनलाइन सब कुछ इनलाइन कर सकते हैं।

  2. फ़ंक्शन कॉल बहुत महंगी

  3. वस्तु का उपयोग महंगा

  4. बहुरूपता आप प्रदर्शन खर्च कर सकते हैं कर रहे हैं, अपने चर और तर्क हमेशा सिर्फ एक ही डेटा प्रकार धारण करना चाहिए।

मठ वस्तु विशेष रूप से धीमी गति से नहीं है, लेकिन तुम वैसे भी वहाँ distance() समारोह नहीं मिलेगा, और Math.method() कॉल के माध्यम से बंद होने से अपने तरीकों तक पहुँचने, अक्षम है।

तो sqrt भी बदतर x*x, कस्टम random समारोह आप के लिए बेहतर हो सकता है, ज़ाहिर है, है, पाई, छोरों में कैश किया जाना चाहिए min और max शायद के रूप में अच्छी तरह से त्रिकोणमिति और लघुगणक गति के बारे में कोई जानकारी नहीं बचा जाना चाहिए, ।


पी.एस .: आप ((x >= 0 ? x : -x) + 0.5) >> 0 जैसे काम कर सकें, Math.ceil(Math.abs()) को बदलने के लिए, लेकिन याद रखें - जब मैं कहते हैं कि "गहन" - मैं क्रंचिंग संख्या, डाटा प्रोसेसिंग, भौतिक विज्ञान, ग्राफिक्स और चीजें हैं जो की तरह के बारे में बात कर रहा हूँ। सामान्य जावास्क्रिप्ट साइटों या आरआईए के लिए - आप सामान नहीं करना चाहिए जो मैं यहां सुझाव दे रहा हूं। इसके अलावा, अधिकांश गति हैक्स में उनके side effects

+0

बिंदु 4 के बारे में ... मैं वास्तव में समझ में नहीं आता। आप ऑब्जेक्ट्स के साथ जेएस में बतख टाइपिंग से बच नहीं सकते हैं, इसलिए आप वस्तुओं के साथ बहुरूपता से बच नहीं सकते हैं। एक लुकअप एक लुकअप है, इसलिए यह मुझे 3 बिंदु के समान दिखता है। –

+0

युक्तियों के लिए धन्यवाद, इसके माध्यम से चला गया और ऐसा लगता है कि माइक्रो-ऑप्टिमाइज़ेशन की तुलना में आर्किटेक्चर से प्राप्त किया जा सकता है। मेरा कोड ग्राफिक्स से संबंधित है इसलिए मुझे थोड़ा प्रदर्शन निचोड़ने की आवश्यकता है। – Duopixel

0

मैं फ़ंक्शन कॉल पर सहमत नहीं हूं। यदि बयानों और लंबे विशेष कार्यों के अंदर बयान यदि कई छोटे सामान्यीकृत कार्यों के साथ व्यवस्थित कोड से धीमे हैं।

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