那些年一起撸过的js引擎

v8

支持jit,性能好,生态大,sdk 支持面向对象编程,上手容易,代码能够保持优雅;调试协议能被 chrome 支持;同时由于 JIT 会在运行时生成额外的代码段,在iOS平台上发布时容易受限

Duktape

性能一般,但代码体积小,使用标准c开发,方便集成和嵌入其他项目;支持ES5.1的标准,文档和社区不错,开发起来经常需要掰着手指在那里计算堆栈入了多少次,出了多少次,刚开始会有点折磨;其作者对于开发和维护非常积极,基本上要求的特性只要社区呼声较高,他都会考虑添加进去,个人开发能力极强

Duktape 使用方面的其他文章请见标签 Duktape

v7

v7 性能是 non-JIT 引擎中较好的,但是对于ES规范的覆盖上不够,成熟度一般

Rhino

rhino的爹是Mozilla,用java编写,可以在android上不用写JNI代码,容易集成,性能也不错,项目历史很悠久,成熟度很高(访问不了其官网的,请前往 Github),但是存在很多不适合在线上环境中使用的特点:

  • 在实际开发中,只要在java层bridge实现掉document、window之类对象后,这种对象的属性读写和方法调用都全部落到了java层,就在js域连document.xxx = yyy;这样的写法都不支持了,查完它的官方maillist都没办法实现。

  • 在js侧用toString, print, JSON.stringify之类的方法容易将java层所有的方法和字段给反射出来,会有安全隐患

没事为什么要撸那么多js引擎

移动互联网年代客户端开发最痛苦的在于动态性,需求总有要变的时候,这时候一门灵活、能通过网络下载到客户端就地执行的语言就很重要了。而目前最合适的那门语言便是javascript。