严格的说WebKit仅仅是个浏览器核心,采用该核心的浏览器很多,如国内的搜狗浏览器,遨游浏览器。其他的如google的chrome(Windows平台,linux平台下为chromium),epiphany(linux平台下,gnome2.28版本之后),苹果的Safari 都采用了webkit的内核。Firefox则是采用Gecko的内核,这是NetScape公司开发的内核,后来开源,mozilla继续开发。另外,现在还有另外两种常见的浏览器内核,Trident主要用在IE系列上,Presto主要用在Opera上。

这篇文章仅仅针对浏览器处理JavaScript的性能作比较,主要在X86平台和龙芯平台。先来解释一下JavaScript,JavaScript是互联网内较为常用的脚本语言,面向对象,主要在浏览器内解释执行,用于生成动态网页,因为很多语言特性受Java影响,所以叫JavaScript。通过JavaScript,浏览器可以运行服务器想要在访问者终端上运行的一些计算程序,以达到更好的浏览体验。

再说说浏览器内核和JavaScript的关系,其实JavaScrip脚本的执行仅仅是浏览器内核的一部分,其他的还有Html语言的解释执行,网页的呈现等等也是内核要做的。之所以这么关心浏览器核心对JavaScript脚本的处理情况,是因为现在的很多应用不再是简单的网页浏览,如gmail,google reader,gooe wave还有一些网页3D特效等等都需要在客户机上作计算,这就需要JavaScript大显身手了。而且越来越多的应用依赖JavaScript,所以现在浏览器对JavaScript的处理速度直接影响着用户体验。目前WebKit的JavaScript引擎SquirrelFish,JavaScript的引擎是SpiderMonkey

目前JavaScript在大多数平台上的处理是靠解释执行的,又因为是动态类型,面向对象。。。,决定了JavaScript执行效率低,所以就诞生了各种针对JavaScript的优化,也有了测试JavaScipt解释器性能的BenchMark,目前常用的是Sunspider和google V8,这篇文章中的对比针对Sunspider测试集。

另外还要说说JIT,Just In time,转换,将部分程序代码直接转换成机器码执行,这种技术在运行时优化中比较常用,JavaScript是解释器,所以JIT在解释器中也是很重要的优化手段。目前X86的webkit和Firefox默认就有JIT支持,但龙芯平台上还没有,本博也是最早对龙芯2F平台有JIT支持的Webkit和firefox  JavaScript引擎作对比的,目前这两个JIT都还没有进入官方的代码库中,感兴趣的朋友可以在下面的前两个链接中找到相关源码。其中webkit的补丁还要做些宏的修改,改动不大。这两个都是从官方源码库checkout出来并修改之后的。其中firefox的JIT部分是由ZSC大牛写出来的,详细的讨论贴和测试结果可以在龙芯论坛看到,见下面的第三个链接。
x86下epiphany(webkit内核)和firefox开了jit之后的性能,如下

webkit Total:                  833.6ms +/- 2.1%
firefox Total:                 1774.4ms +/- 2.7%

(测试环境是我的笔记本 intel Pentium t2390,开了频率调节,所以波动较大)、两个差距:

TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           2.13x as fast     1774.4ms +/- 2.7%   833.6ms +/- 2.1%     significant

=============================================================================

  3d:                  2.96x as fast      257.2ms +/- 2.1%    87.0ms +/- 1.0%     significant
    cube:              3.36x as fast       79.2ms +/- 1.7%    23.6ms +/- 2.9%     significant
    morph:             1.52x as fast       50.4ms +/- 1.4%    33.2ms +/- 3.1%     significant
    raytrace:          4.23x as fast      127.6ms +/- 3.0%    30.2ms +/- 3.4%     significant

  access:              3.26x as fast      237.0ms +/- 4.7%    72.8ms +/- 2.8%     significant
    binary-trees:      8.82x as fast       67.0ms +/- 4.4%     7.6ms +/- 9.0%     significant
    fannkuch:          3.48x as fast       98.2ms +/- 0.6%    28.2ms +/- 3.7%     significant
    nbody:             2.50x as fast       51.4ms +/- 10.3%    20.6ms +/- 3.3%     significant
    nsieve:            -                   20.4ms +/- 56.6%    16.4ms +/- 4.2% 

  bitops:              1.42x as fast       53.8ms +/- 1.9%    38.0ms +/- 0.0%     significant
    3bit-bits-in-byte: *3.10x as slow*      2.0ms +/- 0.0%     6.2ms +/- 9.0%     significant
    bits-in-byte:      -                   11.0ms +/- 8.0%    10.4ms +/- 6.5%
    bitwise-and:       *2.33x as slow*      3.0ms +/- 0.0%     7.0ms +/- 0.0%     significant
    nsieve-bits:       2.62x as fast       37.8ms +/- 1.5%    14.4ms +/- 4.7%     significant

  controlflow:         8.76x as fast       50.8ms +/- 2.0%     5.8ms +/- 9.6%     significant
    recursive:         8.76x as fast       50.8ms +/- 2.0%     5.8ms +/- 9.6%     significant

  crypto:              2.34x as fast       93.8ms +/- 1.7%    40.0ms +/- 2.2%     significant
    aes:               2.57x as fast       54.0ms +/- 3.6%    21.0ms +/- 4.2%     significant
    md5:               2.62x as fast       26.2ms +/- 2.1%    10.0ms +/- 0.0%     significant
    sha1:              1.51x as fast       13.6ms +/- 5.0%     9.0ms +/- 0.0%     significant

  date:                1.87x as fast      275.2ms +/- 2.0%   147.0ms +/- 1.0%     significant
    format-tofte:      2.75x as fast      149.0ms +/- 1.0%    54.2ms +/- 1.0%     significant
    format-xparb:      1.36x as fast      126.2ms +/- 4.0%    92.8ms +/- 1.7%     significant

  math:                1.12x as fast       89.8ms +/- 1.8%    80.2ms +/- 21.7%     significant
    cordic:            2.13x as fast       43.4ms +/- 3.3%    20.4ms +/- 9.2%     significant
    partial-sums:      *1.41x as slow*     34.4ms +/- 2.0%    48.6ms +/- 38.2%     significant
    spectral-norm:     1.07x as fast       12.0ms +/- 0.0%    11.2ms +/- 12.2%     significant

  regexp:              3.73x as fast      125.4ms +/- 15.5%    33.6ms +/- 2.0%     significant
    dna:               3.73x as fast      125.4ms +/- 15.5%    33.6ms +/- 2.0%     significant

  string:              1.80x as fast      591.4ms +/- 3.3%   329.2ms +/- 1.6%     significant
    base64:            *1.24x as slow*     28.4ms +/- 2.4%    35.2ms +/- 1.6%     significant
    fasta:             1.71x as fast      133.0ms +/- 2.3%    78.0ms +/- 4.6%     significant
    tagcloud:          2.81x as fast      169.4ms +/- 3.8%    60.2ms +/- 8.2%     significant
    unpack-code:       1.91x as fast      193.8ms +/- 4.4%   101.6ms +/- 2.7%     significant
    validate-input:    1.23x as fast       66.8ms +/- 5.8%    54.2ms +/- 6.4%     significant

龙芯上的JIT具体对比数据不便透漏,可以从下面第三个链接中找到第一版发布时的测试数据。这里仅仅给出一个对比。webkit之所以with GUI是使用编译出的迷你小浏览器中测试结果,no GUI是使用测试脚本跑出来的结果。

 Webkit with GUI Total:                  6723.4ms +/- 0.5%
        no GUI   Total:                  6355.8ms +/- 0.5%
 Firfox Total 7000 ms 左右。

注: 龙芯中的JIT现在还不够成熟,其中Webkit的JIT仅是针对MIPS III做的,没有针对龙芯的特殊优化。

另外,X86中firefox的版本是3.5.7,龙芯中firefox的版本是3.7pre1.WebKit在X86中版本是epiphany的2.28中的版本,龙芯中为SVN中的2010-01-12 r53114。X86运行环境为Gentoo,Gcc4.4.2,Glibc2.11,龙芯运行环境是玲珑一体机,GCC4.3(龙梦修改版),Glibc2.10。

对比结果可见:X86中WebKit浏览器的性能要明显优于Firefox,达到两倍之多。龙芯相比起来还有些差距,不过相信优化后龙芯的性能会更好。

参考

https://bugs.webkit.org/show_bug.cgi?id=30144

http://dev.lemote.com/code/firefox-3.7-loongson-jit

http://lemote.com/bbs/viewthread.php?tid=26687&extra=page%3D1

http://en.wikipedia.org/wiki/Google_Chrome

http://ineolee.com/pc/several-browser-core-introduction/

相关文章:

  8 Responses to “WebKit和Firefox的JavaScript性能对比”

  1. 请教一下,我的Webkit在Mips上,如果把JIT打开,make jshell会报
    JITStubs.cpp:(.text+0×64): relocation truncated to fit: R_MIPS_PC16 against `cti_vm_throw’
    这样就没有办法对JIT enable之后做测试。

    • 我所测试的webkit版本比较老一些,现在都半年过去了,估计svn库的代码更新导致了你这个问题。
      试过用svn库里较早版本的源码吗?推荐你试试10年2月份左右的代码。估计不会有这个错了。不过2月份的时候mips JIT的补丁还没有进入svn的trunck

  2. [...] Squirrelfish 是Webkit的Javascript引擎。针对龙芯平台(MIPS)已经有了JIT支持,但仅仅对O32系统才有,本博曾经介绍过相关内容(WebKit和Firefox的JavaScript性能对比)。 [...]

  3. [...] WebKit和Firefox的JavaScript性能对比 – 287 views [...]

  4. chromium在我笔记本上的测试结果,相比webkit 833->524 性能高约30%。google的V8引擎不赖。
    ============================================
    RESULTS (means and 95% confidence intervals)
    ——————————————–
    Total: 524.8ms +/- 9.8%
    ——————————————–

    3d: 77.6ms +/- 8.1%
    cube: 30.8ms +/- 21.1%
    morph: 24.4ms +/- 15.5%
    raytrace: 22.4ms +/- 12.2%

    access: 50.0ms +/- 13.2%
    binary-trees: 3.4ms +/- 55.5%
    fannkuch: 18.4ms +/- 10.2%
    nbody: 22.0ms +/- 22.2%
    nsieve: 6.2ms +/- 32.9%

    bitops: 42.6ms +/- 21.0%
    3bit-bits-in-byte: 2.8ms +/- 19.9%
    bits-in-byte: 9.8ms +/- 5.7%
    bitwise-and: 13.0ms +/- 27.9%
    nsieve-bits: 17.0ms +/- 53.2%

    controlflow: 4.0ms +/- 0.0%
    recursive: 4.0ms +/- 0.0%

    crypto: 35.2ms +/- 18.9%
    aes: 15.4ms +/- 45.9%
    md5: 9.0ms +/- 0.0%
    sha1: 10.8ms +/- 46.3%

    date: 76.0ms +/- 39.8%
    format-tofte: 28.6ms +/- 9.0%
    format-xparb: 47.4ms +/- 61.3%

    math: 47.6ms +/- 6.8%
    cordic: 16.8ms +/- 15.2%
    partial-sums: 23.0ms +/- 3.8%
    spectral-norm: 7.8ms +/- 7.1%

    regexp: 23.4ms +/- 4.8%
    dna: 23.4ms +/- 4.8%

    string: 168.4ms +/- 18.1%
    base64: 13.8ms +/- 4.0%
    fasta: 26.0ms +/- 53.2%
    tagcloud: 39.0ms +/- 2.3%
    unpack-code: 62.8ms +/- 58.3%
    validate-input: 26.8ms +/- 46.3%

  5. 相信JAVASCRIPT的路会越走越远。这些前端程序执行起来再慢应该也比在服务器端效率高。另外FIREFOX已经发布3.6了,据说速度提高了15%。

    • @王辉, 不太懂,为啥前端程序的执行效率比服务器端高? 我只是简单的理解为能放在服务器端的程序,绝不放在客户端执行,否则用户体验会因为客户端的运算量过大而降低。

      • @erlv, 我理解中的前端程序就是指的浏览器端的。我觉得恰恰相反,能放在客户端的一定要放在客户端。如果放在服务器端,数据的传送就会耗去大量的时间。

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

   
2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量