【问题标题】:Does the result of a function run several times is cached?函数运行多次的结果是否被缓存?
【发布时间】:2012-10-30 19:54:10
【问题描述】:

在 JavaScript 中,我有一个带有数组的对象,以及一个获取该数组的切片并与另一个数组连接的方法。

如果该方法在同一个函数中运行多次,总是返回相同的值,第一次运行后性能是否会更快(由于结果会缓存在 CPU 缓存中)?

【问题讨论】:

  • 您可能需要提供更多解释或相关代码示例。然而,稍微简短的答案是它是特定于执行代码的 javascript 解析器的实现。简短的回答是否定的。
  • processor cache 的检查级别非常低。我会说你永远不知道。可能有很多其他的东西正在运行,它们可能会在缓存中找到一个位置,以至于 JS 解析器的指令可能/可能不会在指令缓存中找到一个位置。这当然不能指望。

标签: javascript performance caching


【解决方案1】:

当然,没有是唯一的答案。因为函数的目的是获取一些参数并返回一个值。每次调用函数时,所有参数都可能不同,即使它们相同,结果也可能不同,如果调用函数并且每次返回相同结果时也会发生事件,因为它可能会执行操作或导致在其他地方进行一些修改,由解析器缓存结果将是一个错误的想法。

干杯

【讨论】:

    【解决方案2】:

    也许吧。

    这里有很多级别的缓存可供查看。仅您的处理器就有多个缓存。但是,基本上,您根本无法对这些说太多。它们可能具有不同的大小,例如您在此期间所做的其他事情以及功能的持续时间都会影响这一点。还应该注意的是,这在 Javascript 中称为函数调用的级别上不起作用,而是在低得多的级别上起作用。但是,它有时可能意味着可以从函数的执行时间中缩短一些时间。我认为这不太可能或太引人注目,但最后,你真的不能说太多。

    最后,还有 javascript 本身。根据标准,它没有这样的缓存。但是,该标准也没有禁止奇怪的缓存,所以有一天可能会有一种浏览器这样做(我不相信现在有。)

    最后,基本答案是:不,不是很明显。但是,由于缓存实际上可能会提高速度,这总是很难说。

    【讨论】:

      【解决方案3】:

      我想这个问题的一般答案是否定的! JavaScript 中没有缓存,也没有您可以使用 JavaScript 控制的 CPU 缓存。如果您需要缓存某些内容/提高性能,我将不得不自己编程。

      看这个小例子: http://jsperf.com/cachingjq

      【讨论】:

      • 处理器可以缓存JS解析器生成的指令。你怎么确定不是? CPU 缓存不受用户控制。
      • 这就是我的意思; JavaScript 代码无法控制任何事情。 (据我所知)。当然不同的 Javascript 引擎或 CPU 可以做一些特定的事情,但并不是你可以说,当我写这样的代码时,我正在利用 CPU 缓存。
      【解决方案4】:

      不,您必须手动(或使用框架)记忆结果:Javascript Memoization Explanation?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-09
        • 2010-11-13
        • 1970-01-01
        相关资源
        最近更新 更多