gpt4 book ai didi

javascript - 如果类属性不更改,现代 JavaScript (V8) 是否会缓存类方法?

转载 作者:行者123 更新时间:2023-11-30 14:08:17 25 4
gpt4 key购买 nike

对于没有“花哨”东西的 javascript 类:

class Foo {
nums = [1,4,3,8,9.2];

get minBar() {
return Math.min(...this.nums); // Pretend this is a function that takes much more time.
}
}

编译器是否有可能认为'嗯,a.minBar 调用引用的所有数据都没有改变,我不需要对 Min 值进行长时间的计算再次,我将缓存结果'

否则我想如果我需要根据 minBar 值对 Foos 数组进行排序,则必须执行内部状态缓存系统。

最佳答案

虽然我相信您所询问的具体术语被称为 Memoization ,这并不是您真正期望 JS 引擎支持的东西,即使是现代 v8 引擎也是如此。正如 OP 中的评论者指出的那样,“检查数组是否已被修改与查找最小值一样昂贵”,这是有道理的,因为引擎无法知道属性中任何给定方法调用如何/发生了什么变化.

来自链接:

memoization or memoisation is an optimization technique used primarily to speed up computer programs by storing the results of expensive function calls and returning the cached result when the same inputs occur again

我不会绕过一个可能无用的示例,而是将您指向 Lodash图书馆的内存功能。来自文档:

Creates a function that memoizes the result of func. If resolver is provided, it determines the cache key for storing the result based on the arguments provided to the memoized function. By default, the first argument provided to the memoized function is used as the map cache key. The func is invoked with the this binding of the memoized function.

var object = { 'a': 1, 'b': 2 };
var other = { 'c': 3, 'd': 4 };

var values = _.memoize(_.values);
values(object);
// => [1, 2]

阅读其“implementation”可能对您的目的更有用在源代码中。

关于javascript - 如果类属性不更改,现代 JavaScript (V8) 是否会缓存类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953809/

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