关于node性能,一个奇怪的问题
发布于 2年前 作者 peiweippww 882 次浏览

测试一: 代码: var t = Date.now(); var a = 0; var test_fun_1 = function() { for( var j = 0; j < 1000000; j++ ) { a += j; } }; for( var i = 0; i < 100; i ++ ) { test_fun_1(); } 测试方法: 分别把i的值设置为100,200,300,400,用i的值除以最后打印出的时间,即得到每秒执行test_fun方法的次数,分别为:67,69,69,70 总得说来差不多

测试二: var t = Date.now(); var a = 0; var test_fun_2 = 我封装的一个方法,比较复杂,有着js内的各种操作,这个方法每次运行都一样; for( var i = 0; i < 100; i ++ ) { test_fun_2(); } 分别把i的值设置为100,200,300,400,用i的值除以最后打印出的时间,即得到每秒执行test_fun方法的次数,分别为:192,78,42,26

问题: 通过测试一可以看出,如果只是单纯的计算,平均值不会随着计算的增多而变化。 测试二明显随着i的增大,每秒执行方法的次数是越来越小,导致这样的结果的原因有哪些?

7 回复

test_fun_2里面都做了一些什么操作呢 可能挟持了一些资源没有释放吧 没有代码 我也不敢乱猜 不过估计应该是你那个方法的问题

1.里面没有任何io操作,没有操作文件,没有操作数据库。 2.就是纯计算,有个类,然后实例化出来很多对象,每个对象有着自己的属性,比如血量,攻击力,然后就是一个循环,模拟这些事例打斗,直到有一方胜利。 3.基本上就是些计算,数组操作,实例化对象

可能v8引擎有记忆棒功能,以前做过类似的,可以为一些常用的函数尤其在大量循环中做记忆存储器的功能,减小性能开销。

如你所说,确实是这样的,V8的缓存很牛b,所以说fast than c

问题找到了,与js自身的一个sort方法有关系,建议大家尽量少使用这个。 它引出来的问题: 1.运算效率以将近9倍左右的时间降低。 2.运行次数越多,时间还会按2倍左右的时间在原基础上降低。

貌似V8的sort函数跟其他引擎的实现方式不一样

回到顶部