13

パフォーマンスに対するダーツの影響をよりよく理解しようとしています。DartのWeb サイトでのベンチマークは、Javascript にコンパイルされた Dart コードが Javascript だけよりも高速であることを示しています。これはどのように可能ですか?

トレーサーのベンチマーク

Dart VM が v8 よりも高速であることは理解していますが、dart2js で生成された JavaScript が、同じ環境である v8 で実行されている場合に、単純な古い JavaScript よりも高速であることはわかりません。

4

4 に答える 4

19

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

この場合、Dart がソース言語であることは特に特別なことではありません。たとえば、GWT コンパイラ (Java から JavaScript) もこれを行います。もちろん、JavaScript ソースで自動化ツールを実行して、より優れた JavaScript を生成することもできます。これは、Closure コンパイラが行うことです。

技術的には、すべてのトリックを知っていれば、手書きの JavaScript で同じ速度を手動で達成できます。

于 2014-01-05T03:48:30.167 に答える
6

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

最適化の多くはその方向に向かっていると思います。そのようにコードを書くと、読みにくくなり、保守できなくなります。これは、だめだという意味ではありません。

于 2014-01-05T08:54:41.270 に答える
4

ダーツ チームの Vyacheslav Egorov による素晴らしいプレゼンテーションがあり、ライニングを含むいくつかの最適化について詳細に説明しています。

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

まとめVyacheslav Egorov が、Dart の言語機能の一部が新しい JIT Dart コンパイラの設計にどのように影響したか、および V8 JavaScript エンジンが全体の設計にどのように影響したかを詳しく説明します。

于 2014-01-06T14:05:58.607 に答える
3

Seth Ladd と Kasper Lund による興味深いビデオがあります。Kasper は Dart2js コンパイラの作成に関与しており、コンパイラが Javascript コードを最適化する方法についていくつかのコード例を示しています。

于 2014-01-05T18:37:23.057 に答える