私は、主にコレクションの数学計算を実行するClojureScriptプログラムを持っています。それは慣用的な、ホストに依存しないClojureで開発されたので、ベンチマークするのは簡単です。驚いたことに(回答がWhich is faster, Clojure or ClojureScript (and why)?に示唆していることに反して)、ClojureScriptの同じコードは、Clojureの同等のコードより5〜10倍遅く実行されます。ClojureScriptプログラムのパフォーマンスを向上させる
ここに私がしたことがあります。私はlein repl
を開いて、ブラウザはhttp://clojurescript.net/に戻ります。次に、両方のREPLでこれらのスニペットを試しました。
(time (dotimes [x 1000000] (+ 2 8)))
(let [coll (list 1 2 3)] (time (dotimes [x 1000000] (first coll))))
その後、私は戻るブラウザREPLに
function benchmark(count, fun) {
var t0 = new Date();
for (i = 0; i < count; i++) {
fun();
}
var t1 = new Date();
return t1.getTime() - t0.getTime();
}
、ブラウザのREPLでJavaScriptコンソールを開き、ミニマリストのベンチマーク機能を書いた:その後
(defn multiply [] (* 42 1.2))
両方のネイティブJavaScriptを試します乗算、およびそのクローズアップスクリプトの変形をjavacriptコンソールに表示します。
私は- ネイティブJavaScriptの数学を発見した何3210
benchmark(1000000, cljs.user.multiply); benchmark(1000000, function(){ 42 * 1.2 });
は
- ClojureScriptは今私の質問は、どのように
あるそれらのいずれよりも5〜10倍遅いのClojureで数学に匹敵します私はClojureScriptプログラムのパフォーマンスを改善できますか?
私は
- 、これまで考えられてきたいくつかのアプローチがありますが、バック舞台裏で変更可能なJavaScriptの配列やオブジェクトを使用する秋。 (これはまったく可能ですか?)
- ネイティブのJavaScriptの数学演算子を使用することに戻ります。 https://github.com/chlorinejs/chlorineまたはhttps://github.com/gozala/wispのような彼らはより多くの慣用的なJavaScriptを生成するが、彼らは名前空間をサポートしていない明示的に
(aget js/v 0)
- との配列は、Clojureの-用-のjavascriptの少ない野心的な実装を使用するJavaScript(これがすべてでは可能ですか?)
- 使用私はたくさん使っています。
私はあなたがClojureScriptのどこかにスペクトル標準を持っていると思いました! +1する。 –