参看官方的文档,https://developers.google.com/v8/design。
除了JIT和垃圾收集器,关键是对象属性访问的设计。SpiderMonkey采用的是Hash的实现,而V8采用了一种hidden classes的方式,给每类对象对应上一个原型,提高对象属性的访问速度,不过创建hidden classes会消耗很多时间。
不会弄BenchMark,但是你可以比较下面两段代码所消耗的时间(执行完任何一个之后,务必重启node)。
var g = Date.now(); var i, j; for (i = 0; i < 10000; i++) { var x = {}; for (j = 0; j <= i; j++) { x[j] = j; } } console.log(Date.now() - g);
后面的会创建很多hidden class,会很慢。
var g = Date.now(); var i, j; for (i = 0; i < 10000; i++) { var x = {}; for (j = i; j >= 0; j--) { x[j] = j; } } console.log(Date.now() - g);
Node程序里的类结构很稳定,性能会好很多。
JIT不是万金油,不见得就能提升真实Web应用的性能.比如HHVM(支持JIT)执行bench.php这个计算测试脚本,速度要比PHP7(改进的内存模型,无JIT)快几倍,但真实应用(比如WordPress)的测试中,两者性能相近.PHP其实也实现了一个Zend-JIT,bench.php测试提高了5倍,以后可能会集成到Opcache扩展:https://github.com/zendtech/php-src/tree/zend-jit/ext/opcache/jit注意到Zend-JIT对PHP最常用的hash操作的性能提升并不明显.
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(2)
参看官方的文档,https://developers.google.com/v8/design。
除了JIT和垃圾收集器,关键是对象属性访问的设计。SpiderMonkey采用的是Hash的实现,而V8采用了一种hidden classes的方式,给每类对象对应上一个原型,提高对象属性的访问速度,不过创建hidden classes会消耗很多时间。
不会弄BenchMark,但是你可以比较下面两段代码所消耗的时间(执行完任何一个之后,务必重启node)。
后面的会创建很多hidden class,会很慢。
Node程序里的类结构很稳定,性能会好很多。
JIT不是万金油,不见得就能提升真实Web应用的性能.
比如HHVM(支持JIT)执行
bench.php这个计算测试脚本,速度要比PHP7(改进的内存模型,无JIT)快几倍,但真实应用(比如WordPress)的测试中,两者性能相近.
PHP其实也实现了一个Zend-JIT,bench.php测试提高了5倍,以后可能会集成到Opcache扩展:
https://github.com/zendtech/php-src/tree/zend-jit/ext/opcache/jit
注意到Zend-JIT对PHP最常用的hash操作的性能提升并不明显.