2014-01-05 18 views
12

ダーツのパフォーマンスへの影響をよりよく理解しようとしています。 dart websiteでは、JavascriptにコンパイルされたダーツコードがJavascriptより速いことがベンチマークによって示されています。これはどのように可能ですか?私はダートVMがV8よりも高速ですが、私は得ることはありませんが、両方を同じ環境で実行されている場合dart2jsが生成したJavaScriptは、昔ながらのjavascriptよりも高速であるかである、V8方法を理解dart2jsのコードはどのようにjavascriptよりも高速ですか?

Tracer Benchmarks

+8

これは、あなたが知らないか、あまりにも怠惰な最適化を使用できるためです。 – SLaks

答えて

16

dart2jsは通常、JavaScriptコードで手動で追加されない最適化を実行できます。

この場合、ソース言語としてDartが特に特別なことはありません.JavaScriptを生成する自動ツールであれば、これを実行できます.GWTコンパイラ(Java to JavaScript)も同様です。もちろん、より良いJavaScriptを生成するために、JavaScriptソースで自動化されたツールを実行することもできます。これがClosure compilerの機能です。

技術的には、手書きJavaScriptを使って手作業で同じ速度を実現することができます。

+0

これは、彼らが彼らの主張でやや誤解を招くことを意味しますか?本当に「最適化されたJS」と「厄介なJS」の違いはありますか? –

+7

@DA私は、 "不潔"は不公平な誤った特徴であると思う。最もよく書かれたCコードであっても、コンパイラには明白ないくつかの最適化が欠けていて、普通のプロジェクトで作業している人なら誰でもメンテナンス性のために最適化されます。彼らの主張は*わずかに*誤解を招くかもしれないが、全体的に私はそれが正確であると言うだろう。 –

+0

@ChrisHayes意味があります。私は彼らが "dart2js最適化されたコンパイルされたJavaScript""JavaScript" –

6

たとえば、関数インライン化です。繰り返し呼び出されるコードフラグメントが必要な場合は、関数/メソッドでそれをリファクタリングします。 Dart2jsはしばしばその逆です。メソッド呼び出しは、インライン化と呼ばれる呼び出された関数/メソッドに含まれるコードフラグメントで置き換えられることがよくあります。これを手動で行うと、維持できないコードにつながります。

私は多くの最適化がその方向に向いていると思います。そのようにコードを書くことは、単なる読めなくなり、したがって維持不能になるでしょう。 これは、それがうんざりであることを意味しません。

+3

現代のランタイムとJITはこれを喜んで行います。 –

+0

@BenjaminGruenbaum真実ですが、JIT /ランタイムを保存する前に完了しているという事実はありませんか? – Hector

+0

これは単なる例です。私はコンパイラの最適化ではありませんが、Dartチームのメンバーの中にはいくつかあります。関係するすべての関係者は、最適化に常に取り組んでいます。この最適化は、JS VMがすでにそれを行っているため、最適化dart2jsが廃止される状況に繰り返しつながります。限界を押し上げる人々が増えるにつれて、私たち全員が得られるより良い技術が得られます。 –

3

セスラッドとカスパールンドのinteresting videoがあります。 KasperはDart2jsコンパイラの作成に関与しており、コンパイラがJavascriptコードを最適化する方法に関するいくつかのコード例を示しています。

+0

ビデオの関連部分は約7:30から開始されます。 – ntc2

+0

このプレゼンテーションのDart2js部分の拡張版がここにあります:http://youtu.be/GwBb_nqQLuc – ntc2

3

彼は詳細に裏地に含む最適化のいくつかを説明ダーツチームからヴャチェスラフEgorovによって偉大なプレゼンテーションがあります。..

http://www.infoq.com/presentations/dart-compiler

ヴャチェスラフEgorovはの方法をいくつかの詳細概要Dartの言語機能は、新しいJIT Dartコンパイラの設計と、V8 JavaScriptエンジンがどのように全体の設計に影響を与えたかに影響を与えました。

+1

このビデオはDart2jsではなくDart VMとV8についてです。興味深いビデオですが、その質問にはあまり関係しません。 – ntc2

関連する問題