Firefox 9中加入类型推断 JS性能将提升20%到30%
webphp 13年前
<p>据外媒报道,在历时长达18个月的努力之后,Mozilla终于成功为Firefox的Javascript引擎增加了一个重大的新特性,根据初步 测试,至少可以提高20%到30%的Javascript性能。这个新的特性就是在Firefox的JaegerMonkey JIT编译器中加入的类型推断(Type Inference),它将随同Firefox 9一起提供测试。类型推断最早被提及还要追溯到几个月之前的Firefox 5时代,但是直到现在它才第一次登上舞台。</p> <p>如果你是一名web程序员,那你一定会被此震撼!如果你并不太熟悉技术,那么这里有一个对类型推断的简单介绍。</p> <p>在每个编程语言中,变量和函数都有一个类型。类型可以是整数、字符串、浮点数、数组、类……这些内部结构对于编程语言的编译器来说至关重要。有一些 语言是强类型语言,也就是说程序员必须为每个类、函数和变量都定义一种类型;这有点烦人,但是作为回报它将大大提高运行速度;另外还有一些语言,像 Javascript,是弱类型语言,也就是说程序员不必担心这些琐碎的细节问题,可以随心所欲的编写代码而让编译器来背起这个重担。而类型推断则弥补了 强类型语言和弱类型语言之间的鸿沟,你可以继续按照弱类型语言的习惯编写代码,但浏览器会根据使用情况对类型做出最优化的假设,从而依然可以获得性能上的 提升。</p> <p><img title="Firefox 9中加入类型推断 JS性能将提升20%到30%" border="0" alt="Firefox 9中加入类型推断 JS性能将提升20%到30%" src="https://simg.open-open.com/show/55f7189b8623ef44a8ca4be1b7791e9f.jpg" width="600" height="386" /></p> <p>对于Firefox 9来说,数据推断引擎可以将Javascript的性能提高30%。具体提升的数值根据测试的不同而有所不同,但性能的大大提升是毋庸置疑的。据 ExtremeTeck在配置为Intel i7 930 @ 3.8GHz、内存6GB、显卡为Nvidia GTX 460的电脑上测试结果,在关闭类型推断的情况下,Kraken Benchmark的完成时间为3895毫秒;开启类型推断之后,时间缩短到2763毫秒。在V8 Javascript Benchmark中,关闭类型推断的Firefox 9的成绩为6075分,而开启类型推断后,成绩提升到6585分。即使在陈旧的微软HTML5 Sudoku测试中,10000格下类型推断将执行时间从2.6秒缩短至1.62秒;在<a href="/misc/goto?guid=4958188760030527714" target="_blank">FishBowl</a>的帧率测试中,2000条鱼的情况下,类型推断开启后带来了15%-20%的性能提升。</p> <p><img style="width:600px;height:380px;" title="Firefox 9中加入类型推断 JS性能将提升20%到30%" border="0" alt="Firefox 9中加入类型推断 JS性能将提升20%到30%" src="https://simg.open-open.com/show/b911c3902c05daacb1ef326782163ff5.jpg" /></p> <p>Firefox 6,也就是你现在使用的浏览器,它的Javascript引擎基本上和Firefox 9相同,除了没有类型推断。所以基本可以说,在执行Javascript上,Firefox 9比现在的浏览器将要快30%。</p> <p>最后,在你安装运行Firefox 9 Nightly之前,我们要提醒的是在当前的版本中类型推断仍有可能造成某些脚本速度变慢——64位版本应该没问题,但32位版本可能会有些问题。时间上,Firefox 9会在九月底到达Aurora频道。</p> <p> </p> <p><em>ExtremeTech原文地址:<a href="/misc/goto?guid=4958188760776036267" target="_blank">http://www.extremetech.com/computing/94532-firefox-9-javascript-performance-improved-by-20-30-with-type-inference</a></em></p> <p><em>文/</em><strong><a href="/misc/goto?guid=4958188761511664608" target="_blank">HiWebGL</a></strong></p>