web-dev-qa-db-ja.com

TypeScriptのパフォーマンス(asm.js、クロージャーコンパイラ)とオーバーヘッド

私は、将来のプロジェクトでクライアント側MVC(ほとんどの場合Backbone.js + Marionette.jsまたはEmber.js)と組み合わせてTypeScriptを使用することを検討しています。そのため、いくつかの関連する質問がありますパフォーマンスと最適化:

  • TypeScriptの出力は、ネイティブJavaScriptのパフォーマンスと比べてどうですか?

  • asm.jsはJavaScriptのサブセットなので、TypeScriptコードをasm.jsコードに変換できますか?はいの場合、それはすでに可能ですか?

  • Google Closure compilerTypeScriptを使用するAMDプロジェクトのビルドを作成することは可能であり、それでも有用ですか?

  • TypeScriptを追加すると、平均してファイルサイズごとにどのくらいのオーバーヘッドが追加されますか?

  • 小さなプロジェクトでBackbone.jsなどの軽量ライブラリを使用する場合。ファイルサイズに関してTypeScriptを使用することには意味がありますか?

TypeScriptの追加の利点は気に入っていますが、コーディングスタイルとタイピングのパフォーマンスを犠牲にしたくありません。

大きなプロジェクトでのTypeScriptの使用に関する記事/本、特にパフォーマンス、最適化、ビルドに関連するものは大歓迎です!

前もって感謝します !

18
m_vdbeek

私たちはチームでTypeScriptを徹底的に評価およびテストし、他のチームはすでにそれを使用しているので、これが私の経験です。

  • TypeScriptはJavaScriptのスーパーセットであり、ほとんどの場合、パフォーマンスを大幅に低下させることなく1:1からJavaScriptに変換されるため、効率的なJavaScriptの記述方法を知っていれば、効率的なTypeScriptの記述方法を理解できます。それほど効率的ではない機能の1つに継承があります。継承はJavaScriptプロトタイプを使用して「エミュレート」され、JavaScriptで通常作成するよりも多くのコードを生成します。したがって、継承は注意して使用してください。生成されたJavaScriptを見て、構成が十分に効率的にコンパイルされているかどうかを確認できます。
  • TypeScriptをasm.jsにコンパイルすることは、JavaScriptをasm.jsにコンパイルすることと同じ問題です-完全なJavaScriptと比較してasm.jsに欠けている機能をエミュレートする必要があります... asm.jsに一部が必要な場合は、おそらくそれらを自分で書くか、emscriptenなどでより適切な(動的でない)言語からコンパイルします。
  • TypeScriptにはAMDのサポートがいくつかありますが、Googleクロージャのサポートについて話すことはできません...同様のことをまったく異なる方法で実行しようとするため(代わりに、新しい構文ではタイプとメタ情報がコメントに含まれます)、使用に非常に互換性があるとは思いません両方の最大...
  • ファイルサイズは実際には問題ではなく、継承を頻繁に使用しない限り、読み取り可能なJavaScriptのファイルサイズと非常に似ています
  • TypeScriptをバックボーンや他のライブラリと共に使用すると、JavaScriptに比べて1つの利点があります。ほとんどの一般的なライブラリには、TypeScriptの型定義ファイルが既に含まれているため、オートコンプリートと型チェックをほぼ無料で利用できます。適切に記述されたJavaScriptと比較して、ファイルサイズの違いは実際には問題になりません。

TypeScriptはまだかなり新しく、私たちが欲しかった多くのものが(JSLint、コードカバレッジ、TDD、BDDツールなど)当時はありませんでした。さらに、コンパイラーにはいくつかのバグがあり(後で修正されました)、それを使用することを選択しませんでしたが、リストからのポイントは実際のターンダウンとして示されませんでした...

Update:TypeScriptの可能性を確認するには、Visual Studio Online "Monaco"をご覧ください。彼らが行ったことはかなり印象的です TypeScriptの概要 簡単な紹介

26
jJ'