早听闻google的js V8引擎效率惊人,以至于很多人打算用nodejs统管前端、后端,网页端、移动端。V8引擎据说主要有两方面的优化,一个是运用JIT (just in time compiler),即所谓的运行时编译执行的技术,将js代码转换成二进制程序,而非字节码,所以循环执行效率奇佳;另一个是将对象里的map数据结构全改成偏移量索引结构,所以对象中的元素寻址会快很多。
简单测试了一把,结果还真是惊人,同样是使用了JIT的pypy也比nodejs逊色很多,具体如下:
python代码为:
def fibonacci(n):
if n < 2:
return 1
return fibonacci(n - 2) + fibonacci(n - 1)
print fibonacci(40)
javascript代码为:
function fibonacci(n) {
if (n < 2) {
return 1;
}
return fibonacci(n - 2) + fibonacci(n - 1);
}
console.log(fibonacci(40));
php代码为:
<?php
function fibonacci($n) {
if ($n < 2)
return 1;
return fibonacci($n - 2) + fibonacci($n - 1);
}
echo fibonacci(40);
echo "\n";
耗时统计如下:
//python
real 0m34.622s
user 0m34.429s
sys 0m0.113s
//pypy
real 0m11.098s
user 0m7.750s
sys 0m3.320s
//nodejs
real 0m1.432s
user 0m1.413s
sys 0m0.015s
//php
real 0m50.005s
user 0m48.865s
sys 0m0.228s
一时间有人决定前后端都改用nodejs,这样写页面的程序员也能写后端服务代码了。我表示这绝对不是一个好想法,一方面nodejs自己也有一些局限性,比如单纯程,比如编程的逻辑思维习惯问题,另一方面其他语言,像PHP、python、Java在服务端深耕多年,扩展和框架非常丰富,相比于nodejs要完善得多。当然个人非常看好React-native这类js库在移动端的使用。