Seb*_*lor 4 javascript node.js
我在Javascript中实现了Levenshtein距离函数,我想知道用Wikedia的例子("星期日"和"星期六")运行它需要多少时间.
所以我使用console.time()并console.timeEnd()确定了执行函数所花费的时间.
for (var i = 0; i < 15; i++) {
console.time("benchmark" + i);
var result = LevenshteinDistance("sunday", "saturday");
console.timeEnd("benchmark" + i);
}
Run Code Online (Sandbox Code Playgroud)
由于它在0.4ms和0.15ms之间波动,我使用了一个循环,我偶然发现了奇怪的值:
重复出现的事情是第一次(很少是第二次)执行的高值,然后是较小的值.(Chrome控制台和NodeJS中的JS之间的行为相同.)
所以我的问题是:Javascript是否"缓存"执行(因为JS是用V8引擎编译的)?
而且,每次使用不同的参数时,我是否可以使用此行为使函数运行得更快?
V8正在使用JIT编译器.它开始以尽可能快的速度编译所有内容,只需要很少的优化,因为它希望快速启动,然后优化多次调用的函数,以加快实际执行的执行速度.
为什么不首先优化一切?要更快地开始.有些代码只运行一次,优化它是浪费时间,因为运行优化的时间会比优化节省的时间长.JavaScript开始得非常快 - 比较运行Node.js hello world以编译和运行Java hello world(是的,Node.js应用程序每次启动时都是从头开始编译的).
考虑一下这个Node.js程序hello.js:
console.log('Hello from Node');
Run Code Online (Sandbox Code Playgroud)
和这个Java程序,Hello.java:
class Hello {
public static void main(String[] argv) {
System.out.println("Hello from Java");
}
}
Run Code Online (Sandbox Code Playgroud)
运行Node程序:
$ time (node hello.js)
Hello from Node
real 0m0.059s
user 0m0.047s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)
并将其与Java程序进行比较:
$ time (javac Hello.java && java Hello)
Hello from Java
real 0m0.554s
user 0m1.073s
sys 0m0.068s
Run Code Online (Sandbox Code Playgroud)
有关详情,请参阅:
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |