2

高度な JavaScript に関する John Resig のスニペットを調べています。# 19で、彼は関数の戻り値をキャッシュする方法について言及しています。複数のパラメーターを持つ関数の戻り値をキャッシュする最良の方法は何ですか?

受け取った引数を文字列化して、それをキャッシュ オブジェクトのキーとして使用するよりも、はるかに優れた方法が必要です。

function $$(selector, el) {
    var cacheKey = JSON.stringify(arguments);
    if ($$.cache[cacheKey]) return $$.cache[cacheKey];

    return ($$.cache[cacheKey] = NodeListToArray( (el || document).querySelectorAll(s) ));
}
$$.cache = {};
4

2 に答える 2

0

オブジェクトを操作できるカスタムハッシュ関数を使用できます。ただし、ハッシュ関数は衝突を引き起こし、単純な例よりもはるかに多くのコードを必要とします。

または、キャッシュをn次元にすることもできます。ここで、nは引数の数です。だから本質的にこれ:

function $$(selector, el) {
    if ($$.cache[selector] && $$.cache[selector][el])
        return $$.cache[cacheKey][el];
    // etc.

これは、selectorとelの両方がオブジェクトキーとして使用できることを前提としています。別の方法でそれらを文字列化する必要があるかもしれません。

于 2013-03-11T06:20:24.333 に答える
0

配列要素を考えてみてください。

JSON (JavaScript Object Notation) は一般的なプラットフォームで動作するため、簡単に使用するには、使用する関数を作成する必要があります。

$$.cache[0]を読んだ後の簡単な方法は次のとおりcachekeyです。

もっと簡単にすると、後でセキュリティの問題が発生する可能性があります。

これがあなたの要件を満たすことを願っています:)

于 2013-03-11T06:23:01.663 に答える