के प्रदर्शन में सुधार करें मेरे पास क्लोजरस्क्रिप्ट प्रोग्राम है जो मुख्य रूप से संग्रह पर गणित की गणना करता है। यह मूर्खतापूर्ण, मेजबान-स्वतंत्र क्लोजर में विकसित किया गया था, इसलिए इसे बेंचमार्क करना आसान है। मेरे आश्चर्य के लिए (और उत्तर Which is faster, Clojure or ClojureScript (and why)? पर दिए गए उत्तरों के विपरीत), क्लोजरस्क्रिप्ट में एक ही कोड क्लोजर समकक्ष की तुलना में 5-10 गुना धीमा चलता है।क्लोजरस्क्रिप्ट प्रोग्राम
यहां मैंने जो किया है। मैंने lein repl
खोला और एक ब्राउज़र http://clojurescript.net/ पर प्रतिलिपि बना दिया। तब मैंने इन स्निपेट दोनों आरईपीएल में कोशिश की।
(time (dotimes [x 1000000] (+ 2 8)))
(let [coll (list 1 2 3)] (time (dotimes [x 1000000] (first coll))))
तब मैं ब्राउज़र repl पर एक JavaScript कंसोल खोला और एक minimalist बेंचमार्क समारोह,
function benchmark(count, fun) {
var t0 = new Date();
for (i = 0; i < count; i++) {
fun();
}
var t1 = new Date();
return t1.getTime() - t0.getTime();
}
ब्राउज़र पर वापस आरईपीएल लिखा है:
(defn multiply [] (* 42 1.2))
फिर दोनों देशी जावास्क्रिप्ट कोशिश गुणा, और जावास्क्रिप्ट कंसोल में इसके क्लोजरस्क्रिप्ट संस्करण,
benchmark(1000000, cljs.user.multiply);
benchmark(1000000, function(){ 42 * 1.2 });
मैं
- मूल निवासी जावास्क्रिप्ट गणित क्या पाया clojure में गणित के बराबर है
- ClojureScript उनमें से या तो से 5-10 गुना धीमी
अब मेरे सवाल, कैसे है क्या मैं अपने क्लोजरस्क्रिप्ट प्रोग्राम के प्रदर्शन में सुधार कर सकता हूं?
कुछ दृष्टिकोण वापस परिवर्तनशील जावास्क्रिप्ट सरणियों और परदे के पीछे वस्तुओं का उपयोग करने के मैं अब तक
- पतन पर विचार किया है रहे हैं। (क्या यह संभव है?)
- मूल जावास्क्रिप्ट गणित ऑपरेटरों का उपयोग करने के लिए वापस गिरें। (सब पर यह संभव है?)
- उपयोग जावास्क्रिप्ट सरणियों स्पष्ट
(aget js/v 0)
- clojure के लिए जावास्क्रिप्ट की एक कम महत्वाकांक्षी क्रियान्वयन का उपयोग के साथ, https://github.com/chlorinejs/chlorine या https://github.com/gozala/wisp की तरह वे एक अधिक मुहावरेदार जावास्क्रिप्ट उत्पन्न है, लेकिन वे नामस्थान का समर्थन नहीं करते जो मैं बहुत उपयोग कर रहा हूँ।
मैंने सोचा था कि क्लोजरस्क्रिप्ट में कहीं स्पेक्ट्रल मानक था! उस पर +1। –