2016-10-07 1 views
3

私のように実行時に動的に機能のトンを作成するJavaScriptコードがあります。重複した機能の多くがあるだろうという高い可能性があるJavaScriptの機能のキャッシング

f = new Function("a", "b", "something ..."); 

(同じパラメータ、同じボディを意味します)。

質問:キャッシングアルゴリズムやJSエンジン(V8)を実装する必要がありますか?

サイド質問: 私はIEでデバッグすると、動的に作成されたコードが表示されます(重複機能はありません - これはIEがこのチャッチングを行うことを示唆しています)。 Chrome devに動的に作成されたコード(上の例など)を表示する方法をご存じですか?ツール?

ありがとうございます!

+7

なぜ、たくさんの関数を作成し、関数を再利用しようとしないのですか?おそらく、この数を減らす方法があります。 – IulianP

+0

どちらのブラウザにもキャッシュの種類があるとは限りません。新しい関数( 'a'、 'b'、 'return a + b') console.log(f(f、a、b) === g) ' –

+0

@ YuriTarabankoそれは2つの異なるインスタンスを作成することが期待されます。問題は、解析とコンパイルの目的でコードをキャッシュするかどうかです。 – Bergi

答えて

0

関数は関数オブジェクトです。 GCの対象です。

常に同じ参照変数に割り当てる場合は、以前のバージョンをGCでゴミ箱に移動することができます。

しかし、関数の以前に定義されたバージョンへの参照が収集されないようにするため、メモリリークを注意する必要があります。

+0

だから私は、文字列(paramsとbodyのconcatになる)からいくつかのハッシュを計算することです - これらの文字列を関数でキャッシュします。そうだね? – user1038334

+0

BTW - 誰でもChromeの開発ツールにこのような動的関数を表示する方法を知っていますか? – user1038334

+0

関数の一意のハッシュを計算できる場合は、グローバルオブジェクトfx = {}を作成し、そのオブジェクトの下にあるすべての関数をハッシュで格納できます。次に関数を作成する必要があるときは、fxがすでにそのキーで何かを含んでいるかどうかを確認してください。 –