gpt4 book ai didi

javascript - 在 underscore.js 中使用 memoize 函数

转载 作者:可可西里 更新时间:2023-11-01 01:55:59 25 4
gpt4 key购买 nike

我正在尝试使用 Underscore.js 中的 memoize 函数缓存 ajax 调用的结果。我不确定我的实现。还有如何使用 key 取回缓存的结果数据。下面是我的实现:

Javascript 代码:

var cdata = $http
.get(HOST_URL + "/v1/report/states")
.success(function(data) {
//put the result in the angularJs scope object.
$scope.states = data;
});

//store the result in the cache.
var cachedResult = _.memoize(
function() {
return cdata;
}, "states");

我使用 memoize 来存储 ajax 结果是否正确。同样一旦放入缓存,如何根据key进行检索。即“状态”。

最佳答案

让我们了解一下 _.memoize 是如何工作的,它接受一个需要内存的函数作为第一个参数,并缓存函数返回给定参数的结果。下次如果使用相同的参数调用内存函数,它将使用缓存的结果,并且可以避免函数的执行时间。因此减少计算时间非常重要。

如前所述,它内存的上述斐波那契函数工作得非常好,因为参数具有原始类型。

当您必须内存一个接受对象的函数时,就会出现问题。为了解决这个问题,_.memoize 接受一个可选参数 hashFunction,它将用于对输入进行哈希处理。这样您就可以使用自己的哈希函数唯一地标识您的对象。

_.memoize 的默认实现(使用默认哈希函数)按原样返回第一个参数 - 在 JavaScript 中它将返回 [Object object].

例如

var fn = function (obj){ some computation here..}
var memoizedFn = _.memoize(fn);

memoizedFn({"id":"1"}) // we will get result, and result is cahced now

memoizedFn({"id":"2"}) // we will get cached result which is wrong

为什么默认在_.memoize中有函数是function(x) {return x}

这个问题可以通过传递一个哈希函数来避免

_.memoize(fn, function(input){return JSON.stringify(input)});

当我将 _.memoize 用于处理数组参数的函数时,这对我来说是一个真正的帮助。

希望这对很多人的工作有帮助。

关于javascript - 在 underscore.js 中使用 memoize 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24902019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com