from http://lovechrome.com/viewthread.php?tid=116&extra=page%3D1
V8技术分析一(ZZ)
[font=verdana][size=12px][font=Simsun][size=16px][url=http://blog.youkuaiyun.com/zengwh/archive/2008/09/14/2897850.aspx][font=Arial, sans-serif]V8[/font]技术分析一[/url][/size][/font][size=14px]为什么[font=Nimbus Roman No9 L, serif]V8[/font]的速度比其他浏览器的[font=Nimbus Roman No9 L, serif]JS[/font]引擎快?以下将做一个大致的分析。只是个人的分析,可能有不正确之处,欢迎指正。[/size] [size=14px][font=Nimbus Roman No9 L, serif]V8[/font]执行[font=Nimbus Roman No9 L, serif]JavaScript[/font]的流程如下:[/size] [align=center][size=14px] [/size][/align][align=center][size=14px]图[font=Nimbus Roman No9 L, serif]1 V8 [/font]处理[font=Nimbus Roman No9 L, serif]JavaScript[/font]流程[/size][/align][size=14px][font=Nimbus Roman No9 L, serif]V8[/font]执行过程分为两个阶段:编译阶段和执行阶段。[/size] [size=14px]首先[font=Nimbus Roman No9 L, serif]JavaScript[/font]经过[font=Nimbus Roman No9 L, serif]Compiler[/font]将脚本转为抽象语法树[font=Nimbus Roman No9 L, serif](AST)[/font],然后在宏汇编器的作用下,将[font=Nimbus Roman No9 L, serif]AST[/font]的每个节点转化为机器相关的指令[font=Nimbus Roman No9 L, serif]([/font]如[font=Nimbus Roman No9 L, serif]Intel[/font]有[font=Nimbus Roman No9 L, serif]IA32[/font]实现,[font=Nimbus Roman No9 L, serif]ARM[/font]有[font=Nimbus Roman No9 L, serif]arm[/font]实现[font=Nimbus Roman No9 L, serif])[/font],最后交由[font=Nimbus Roman No9 L, serif]CPU[/font]直接执行这些生成的指令。[/size] [size=14px][font=Nimbus Roman No9 L, serif][/font]其他浏览器[font=Nimbus Roman No9 L, serif]JS[/font]引擎[font=Nimbus Roman No9 L, serif](Firefox)[/font]在编译阶段和[font=Nimbus Roman No9 L, serif]V8[/font]类似,但是生成的指令不是机器相关的指令而是自定义的指令,因此导致在执行阶段需要解释执行。这也就是为什么[font=Nimbus Roman No9 L, serif]V8[/font]引擎的性能如此卓越的根本原因。[/size] [size=14px][font=Nimbus Roman No9 L, serif][/font]从根本上,[font=Nimbus Roman No9 L, serif]V8[/font]是包含了一个[font=Nimbus Roman No9 L, serif]JIT[/font]编译器,并且直接有CPU执行生成的体系结构相关的指令,因此才比其他引擎快。[/size] [/size][/font]