11

この記事で説明するように、JavaScript関数呼び出しをインライン化すると、実行が高速化され、gzip後のコードサイズも小さくなります。

http://blog.calyptus.eu/seb/2011/01/javascript-call-performance-just-inline-it/

ただし、JSソースファイルを自動的に処理し、その中のすべての(またはより適切な、選択された)関数呼び出しをインライン化するツールが見つかりません。GoogleのClosureCompilerはインライン化を行いますが、常にではなく、構成もできません。

前もって感謝します!

4

2 に答える 2

1

この「テクニック」が実行時間を短縮するとは思えません。少なくとも実際のシナリオではそうではありません。ブログはコードサイズとGzippingthoについて正しいかもしれません。

とにかく、Javascriptのミニファイ/コンプレッサーがこれをたくさん行うとは思いません。理由は単純で、提供されている例では非常に明白です。関数呼び出しを実際の関数コードに置き換えることで、別のコンテキストに設定することになります。これは非常に邪悪になる可能性があります。親関数(-context)がすでにfooという名前の変数を宣言して使用している場合はどうなりますか。同じ変数が他の関数内で使用されている場合、それを上書きしてエラーを引き起こす可能性があります。

慎重に表現された「動的スコープ」(実際にはecma-scriptでは使用できません)を使用して追加のコンテキストを作成する、try/catchまたはブロックの使用がある場合はさらに悪化します。evalただし、このシナリオでは、JITまたはJavascriptの実装が何かを最適化することはほとんど不可能です。

于 2011-05-15T15:54:15.923 に答える
0

JITに、あなたからインライン化するようなものを考えさせてください。インライン化は、キャッシュのパフォーマンスを低下させることにより、パフォーマンスを簡単に悪化させる可能性があります。

また、実際のボトルネックを特定しない限り、このような時期尚早の最適化を行う価値はほとんどありません。

于 2011-05-15T15:51:14.433 に答える