Safari将开发新的解释器SquirrelFish

WebKit团队推出SquirrelFish,一种基于字节码的JavaScript引擎,相比之前版本性能提升60%。该引擎采用字节码执行,实现了多种优化技术如常量折叠、类型推断等,进一步提升了JavaScript的执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.youkuaiyun.com/isaaq/archive/2008/06/18/2559967.aspx

为适应浏览器市场的发展Tamarin系的另一个分支SquirrelFish近期也有不小的动向,下面让我们来看一些资料。

1、新闻背景

上周,WebKit开发团队向外正式宣布他们正在为WebKit的JavaScript引擎开发一个新解释器--SquirrelFish。根据WebKit官方博客,SquirrelFish的速度比之前的解释器快1.6倍”。

与之前的解释器使用遍历语法树的实现方式不同的是,SquirrelFish的实现采用字节码。

遍历语法树实现方式存在的高代价问题,在SquirrelFish字节码引擎中基本都不存在。首先,一个字节码流能够精确描述执行程序所需的操作,编译成字节码实际上隐性地跳过了不相关的语法结构。其次,字节码调度程序只是一个简单地从内存中直接读取,转而间接调度分支程序的过程。因此,执行字节码指令要比访问语法树节点快得多。第三,由于不再需要语法树,解释器无需继续在语法树节点间传送执行状态。

解释器使用字节码之后能够直接从字节码解释的所有的优化中获益匪浅,这也意味着SquirrelFish的速度还会继续得到提升。

在解析器使用字节码之后,我们目前实现的编译时优化有:
  • 常量折叠(constant folding)
  • 更强的拷贝传播
  • 类型推断——包括精确和推测两种方式
  • 基于表达式上下文的特化——尤其是void和boolean上下文
  • 窥孔优化(peephole optimization)
  • 逃逸分析 (escape analysis)

SquirrelFish团队特别对那些在同一领域工作的人们表示了感谢,正是他们的研究成果激发了SquirrelFish的开发灵感。

SquirrelFish的设计很大程度上来自于高效虚拟机领域的一些最新研究成果,其中包括M. Anton Ertl教授、David Gregg教授等人以及Lua编程语言的开发者们的研究。

以上转自InfoQ的《WebKit小组宣布开发基于字节码的JavaScript解释器——SquirrelFish

2、SquirrelFish的核心WebKit

WebKit,Safari和Safari Mobile的核心引擎,尚未发布的Android也采用WebKit框架。开发者宣布WebKit的核心JavaScript 引擎将有一个新的解释器,代号为SquirrelFish,速度将比前一个版本的解释器有大幅度的提升。

WebKit团队希望推进Safari在JavaScirpt解析器上的呈现能力。通过简化语法,使用更多字节码避免重复使用相同代码。

SquirrelFish是基于寄存器、直接线程的高级字节码引擎,目前的开发才刚刚起步。开发者称已计划好的6个最优化方案将能使速度再次飞跃。

它将通过延时从语法树生成字节码,使用简单的一次编译实现复制生成(copy propagation)。 在 SunSpider JavaScript性能测试中,可以看到性能上的大幅提升:

浏览器

由上图可知,SquirrelFish的速度要大幅领先WebKit先前的解释器。实际数据显示,在SunSpider JavaScript性能测试中,SquirrelFish的速度是WebKit先前的解释器的1.6倍。

以上转自《Safari将开发新的解释器SquirrelFish

3、与Tamarin的性能比较

由上图可以看出 SquirrelFish的速度明显大于Tamarin系列。

具体性能如下表:

Testsquirrelfish

tamarin-tracing

untyped

tamarin-tracing

typed

sunspider/access-binary-trees.as339899

sunspider/access-fannkuch.as108164119

sunspider/access-nbody.as126186182

sunspider/access-nsieve.as307157

sunspider/bitops-3bit-bits-in-byte.as351615

sunspider/bitops-bits-in-byte.as354723

sunspider/bitops-bitwise-and.as5923139

sunspider/bitops-nsieve-bits.as706146

sunspider/controlflow-recursive.as203438

sunspider/crypto-aes.as52193179

sunspider/crypto-md5.as38175190

sunspider/crypto-sha1.as404640

sunspider/math-cordic.as676047

sunspider/math-partial-sums.as10422796

sunspider/math-spectral-norm.as373834

sunspider/s3d-cube.as84179145

sunspider/s3d-morph.as938978

sunspider/s3d-raytrace.as97255138

sunspider/string-fasta.as87183178

sunspider/string-validate-input.as8042094185

Aggregate (without string-validate-input)121523531743

Testsquirrelfishtamarin untypedtamarin typed

sunspider/access-binary-trees.as378083

sunspider/access-fannkuch.as10913973

sunspider/access-nbody.as125202185

sunspider/access-nsieve.as317643

sunspider/bitops-3bit-bits-in-byte.as262614

sunspider/bitops-bits-in-byte.as37416

sunspider/bitops-bitwise-and.as5929121

sunspider/bitops-nsieve-bits.as697845

sunspider/controlflow-recursive.as206065

sunspider/crypto-aes.as509673

sunspider/crypto-md5.as385667

sunspider/crypto-sha1.as405553

sunspider/math-cordic.as6612484

sunspider/math-partial-sums.as10528991

sunspider/math-spectral-norm.as3711045

sunspider/s3d-cube.as8713449

sunspider/s3d-morph.as978455

sunspider/s3d-raytrace.as9916394

sunspider/string-fasta.as89152129

sunspider/string-validate-input.as82140128

Aggregate130323961403

上表详细列出了不同项目运行不同测试用例的耗时比较,可以明显看出他们之间的差距来。

4、项目网址:http://webkit.org/blog/189/announcing-squirrelfish/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值