先要科普一下,JavaScript只是ECMAScript标准上的一个实现,各个浏览器厂商对JavaScript的支持程度并不一样,各浏览器厂商都有自己的浏览器产品,这些浏览器的实现是不一样的。
浏览器中又有浏览器引擎和JavaScript引擎,顾名思义,一个是用来渲染成html的,一个是执行JavaScript代码的,我们只需要知道这个引擎是由什么编写的就可以了。
这里简单的介绍几种主流的浏览器:
谷歌 chrome
谷歌浏览器下最新的js引擎叫做v8,这个谷歌发布的开源引擎,由c++编写的,该v8引擎在chrome中被使用,当然也可以独立运行,比如nodejs环境,当然也可以嵌入在c++等应用程序中执行。
火狐 firefox
火狐浏览器下有好几个js引擎,TraceMonkey引擎、JaegerMonkey引擎是由c++编写的。
rhino引擎由java编写。
Opera
Opera下的js引擎叫做carakan,堆栈字节码指令集。
微软 ie
IE下的js引擎叫做chakra,由c和c++编写。
苹果 safari
由KJS引擎衍生出来的JavaScriptCore引擎,由c和objective-c编写。
其实还有一些js引擎,不过用的少,就不做介绍了。
通过上述内容,大家能够看到,大部分的js引擎都是有c++做出来的,为什么会这样?
编程语言的进化过程是,机器语言-汇编语言-高级语言,其中,无论是汇编语言还是高级语言,最后真正执行前,都会编译成机器语言,所以机器语言运行的速度是最快的,汇编语言其次,高级语言最慢。(注:这里并不是说高级语言一定要先编译成汇编语言,然后再编译成机器语言,而是说高级语言在编译成机器语言时,因为其体积远比汇编大,所以编译时较慢),那按照这个道理来说,为什么不直接用机器语言编写js引擎呢?答案很简单,因为性价比的问题,虽然直接用机器语言开发js引擎时的js执行时的速度最快,但这种开发方式的开发周期是最长的,所以大家思来想去,还是觉得用c++开发性价比最高。
来源:千锋HTML5