JavaScript缓存返回具有多个参数的函数的值

时间:2013-03-11 05:54:25

标签: javascript caching

我正在经历John Resig's snippets on advanced JavaScript。在#19上,他提到了一种缓存函数返回值的方法。缓存具有多个参数的函数的返回值的最佳方法是什么?

必须有一个更好的方法,比通过字符串化收到的参数并将其用作缓存对象的键:

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

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

2 个答案:

答案 0 :(得分:0)

您可以使用可以对对象进行操作的自定义哈希函数。但哈希函数会导致冲突,并且需要比简单示例更多的代码。

或者你可以使缓存为n维,其中n是参数的数量。基本上就是这样:

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

这假设选择器和el都可以用作对象键。您可能需要以其他方式对它们进行字符串化。

答案 1 :(得分:0)

只考虑一个数组元素

JSON(JavaScript Object Notation)适用于通用平台,因此为了方便使用,您必须创建一个供您使用的函数,

此处,$$.cache[0]是您阅读cachekey

后的简单方法

如果我们让事情变得更容易,我们以后可能会遇到安全问题。

我希望这能满足你的要求:)

相关问题