【发布时间】:2019-10-18 15:58:53
【问题描述】:
我有一些代码可以解析数百个对象(来自网络请求)。然后这段代码将调用一个函数来查看它是否匹配一个值。
I.E.
(1..100+){
isMatch(foo);
}
function isMatch(foo) {
const matches = ["apple", "orange", "strawberry"];
return matches.includes(foo);
}
我的问题是 JS 如何处理正在创建的“匹配”数组。 isMatch 函数可能会被调用 100 多次。它是每次都在内存中不断地实例化这个数组,还是会自动缓存它?或者,这真的不是因为数组大小和GC的内存问题吗?
另外,使用 array.includes 与使用正则表达式进行实际匹配之间有什么性能差异吗?
【问题讨论】:
-
嗯,我没有任何确凿的证据,但感觉
matches数组不会被缓存。再说一次,它可能,我不确定。似乎编译器可以推断出它需要保留该数组的一个副本,而不是多个副本,尤其是在您多次调用该函数之后。 -
“另外,...之间的任何性能差异” -> jsperf.com
-
const的作用域是函数,因此会一遍又一遍地创建和销毁。如果您有一个固定列表,请在更广泛的范围内声明它并直接在isMatch中引用它,或者将其作为参数传递,如isMatch(foo, LIST_OF_MATCHES)
标签: javascript caching memory garbage-collection