gpt4 book ai didi

javascript - Javascript 是 "caching"操作吗?

转载 作者:搜寻专家 更新时间:2023-10-31 23:07:55 25 4
gpt4 key购买 nike

我在 Javascript 中实现 Levenshtein 距离函数,我想知道使用维基百科的示例(“星期日”和“星期六”)运行它需要多少时间。

所以我使用了 console.time()console.timeEnd() 来确定函数执行所花费的时间。

for (var i = 0; i < 15; i++) {
console.time("benchmark" + i);
var result = LevenshteinDistance("sunday", "saturday");
console.timeEnd("benchmark" + i);
}

由于它在 0.4 毫秒和 0.15 毫秒之间波动,我使用了一个循环并且偶然发现了奇怪的值:

  • 0.187毫秒
  • 0.028ms
  • 0.022毫秒
  • 0.022毫秒
  • 0.052毫秒
  • 0.026毫秒
  • 0.028ms
  • 0.245毫秒
  • 0.030毫秒
  • 0.024ms
  • 0.020毫秒
  • 0.019毫秒
  • 0.059ms
  • 0.039ms
  • 0.040毫秒

重复出现的是第一次(很少是第二次)执行的高值(value),然后是较小的值(value)。(Chrome 控制台中的 JS 和 NodeJS 之间的行为相同。)

所以我的问题是:Javascript 是否“缓存”执行(因为 JS 是用 V8 引擎编译的)?

另外,每次使用不同的参数时,我能否使用此行为使函数运行得更快?

最佳答案

V8 使用的是 JIT 编译器。它开始尽可能快地编译所有内容,几乎不需要优化,因为它希望快速启动,然后优化被多次调用的函数,以加快真正重要的执行速度。

为什么它不从一开始就优化所有内容?开始得更快。有些代码只运行一次,优化它会浪费时间,因为运行优化的时间会比优化节省的时间长。 JavaScript 启动得非常快 - 将运行 Node.js hello world 与编译和运行 Java hello world 进行比较(是的,Node.js 应用程序每次启动时都是从头开始编译的)。

考虑这个 Node.js 程序,hello.js:

console.log('Hello from Node');

还有这个 Java 程序,Hello.java:

class Hello {
public static void main(String[] argv) {
System.out.println("Hello from Java");
}
}

运行 Node 程序:

$ time (node hello.js)
Hello from Node

real 0m0.059s
user 0m0.047s
sys 0m0.012s

与Java程序比较:

$ time (javac Hello.java && java Hello)
Hello from Java

real 0m0.554s
user 0m1.073s
sys 0m0.068s

有关详细信息,请参阅:

关于javascript - Javascript 是 "caching"操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42631226/

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