JavaScript“缓存”与“内存”

如果您搜索如何在Stackoverflow中的JS中缓存变量,则可以找到指向cookie或本地存储的答案。

另一方面,“缓存”这个词经常被用作:“缓存数组的长度,所以我们不必每次计算它”。

我们当然不会在cookie或本地存储中缓存长度。 我的问题是:

“缓存”长度的位置在哪里? 它在记忆中吗? 如果是这样,为什么我们使用“缓存”这个词?


这是一个极其超负荷的问题,看起来你在这里混淆了一些公平的概念。 希望这有助于:

对你的问题“”缓存“长度的位置在哪里?它在内存中吗?” 任何给定值的变量都存储在内存中的特定位置。 在JavaScript中,分配给基本类型(例如数字或字符串)的变量会被复制到新的内存位置(按值传递),而对象文字将包含对特定对象在内存中的位置(通过引用传递)的引用的值。 传递引用与价值传递之间有什么区别?

你的问题“缓存数组的长度,所以我们不必每次都计算它”基本上归结为通过利用已知在算法范围内恒定的变量优化特定算法的性能。 即array.length查找比确定单个变量的值稍长。

“缓存”或“本地存储”环境中的“缓存”可以解释为将某些数据存储或保存一段时间,时间长于应用程序实例的生命周期。 例如数据库中的用户对象,用户登录时会获取该数据。这类数据通常会持久存储到硬盘等固体介质中,但有很多例外,并且可能非常复杂。

也:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management

在Javascript中通过引用传递变量


缓存数组长度意味着将一个数组的长度保存在一个简单变量中,循环不必在每次迭代中调用数组长度例程。

下面的代码必须在每次迭代中计算数组的长度。 这可能成本不高。

var total = 0;
for (var i = 0; i < myArray.length; i++) {
    total += myArray[i];
}

相反,下面的代码将数组长度缓存到一个简单的变量(内存)。 所以,从技术上讲,循环只能在每次迭代时检查内存指针的值。

var total = 0;
for (var i = 0, len = myArray.length; i < len; i++) {
    total += myArray[i];
}

您可以通过缓存获得略微的性能优势。 这是以上情况的性能比较。

在这里输入图像描述

你可以在这里找到原文。

链接地址: http://www.djcxy.com/p/70001.html

上一篇: JavaScript "cache" vs "memory"

下一篇: How to loop over an Array with JavaScript?