Archive

Archive for January, 2013

JS and js namespaces in SpiderMonkey

January 30th, 2013 No comments

今天在Mozilla的SpiderMonkey C++编码规范[1]中找到了JS和js的说明:

Mozilla SpiderMonkey 中有两个不同的 namespace: JS 和 js。JS 名字空间用来存放公开的函数和类型名称。类似 JSXXX、jsXXX、JS_XXX 的函数和类型名都应该放在这个名字空间中;js 名字空间用来保存私有的函数和对象。

SpiderMonkey的这两个名字空间用大小写进行区分,带来的最大的不方便,就是用搜索引擎搜索的时候无法找到相关的说明。以前想找这两个名字空间的区别,搜索了半天都找不到相关的网页。

这个博客,估计想知道JS和js区别的SpiderMonkey初学者也搜不到。 🙂

 

[1]SpiderMonkey C++编码规范: https://wiki.mozilla.org/JavaScript:SpiderMonkey:C%2B%2B_Coding_Style

Farewell, JaegerMonkey!

January 21st, 2013 No comments

这样的告别有点早,但是随着 IonMonkey 正式在 Firefox 18 中启用,JaegerMonkey 的替换工作也会开始加速。从 Mozilla Bugzilla 中的这个页面(Bug 805241)可以看到相关的工作已经进行了大半,JaegerMonkey 被一个简单的 Baseline Compiler 替换掉的日子或许已经不远了。贴上 Baseline Compiler 的目标:

Jan de Mooij [:jandem] 2012-10-24 15:50:07 PDT

Now that IonMonkey has landed, we want to replace JM(+TI) with a much simpler baseline compiler. The main goals are

* No dependency on TI, no recompilations caused by type changes
* Fast compilation times
* Clean design, easy to support new ops
* No advanced optimizations (LICM, inlining, regalloc)
* ICs for most operations, reusable IC stubs
* Collect and store data useful for Ion compilation

SunPinyin Installation on Ubuntu 10.04

January 14th, 2013 No comments

在 Ubuntu 10.04 LTS 下安装 SunPinyin 2.0.3,下载了 sunpinyin-all-in-one-2.0.3.tar.gz 压缩包之后解压编译,需要从 https://code.google.com/p/open-gram/ 下载另外两个文件 lm_sc.t3g.arpa-20121025.tar.bz2 和 dict.utf8-20120830.tar.bz2 进行编译。但是总是下载失败,不知道是不是因为国内随机丢Google站点的数据包的缘故。解决方法是手工下载这两个文件,注释掉 Makefile 中的下载指令。以下是编译和安装的脚本:

 

Hello Firefox 18: Benchmark Results, Comparing with Firefox 17.0.1 and Chromium 18

January 10th, 2013 No comments

Firefox 18 发布了,新闻说启用了IonMonkey JIT的SpiderMonkey性能提升了25%(Kraken)。今天测试了一下,发现在 Linux上,Firefox 18 比 Firefox 17 的提升,甚至可以达到 47%,跟 Chromium 的速度旗鼓相当。以下是用我的台式机跑出来的 Kraken、V8、SunSpider、Octane 四个Benchmark的结果。

Kraken Benchmark

Firefox 18

详细结果

Firefox 17

详细结果

Firefox 18 vs. Firefox 17

(为了防止折行,将“FROM”和“TO”列隐去了,可以参看上面的结果):

从结果来看引入了IonMonkey之后加速了将近47%。但是同时,个别程序性能反而下降了。

Chromium

作为对比,一并测试了一下 Chromium 的得分,版本号 18.0.1025.168(详细结果):

 

总体上而言还是 Chromium 快一点,但是得分很接近,在一些分项上 Firefox 18.0 速度比Chromium更快。

Firefox 18.0 vs Chromium

 

Sunspider 0.91 Benchmark

SunSpider 0.9.1 的测试结果,有点意外的是 Firefox 17.0.1 最快,其次是Firefox 18.0,Chromium最慢。嗯,一定是我打开的方式不对。

测试地址:http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/driver.html

Firefox 18.0

详细结果

 

Chromium

详细结果

Firefox 17.0.1

详细结果

V8-v7 Benchmark

V8的测试结果,Firefox 18.0 > Chromium > Firefox 17.0.1

测试地址:http://v8.googlecode.com/svn/data/benchmarks/v7/run.html

Firefox 18.0

Score: 7671

Richards: 8811
DeltaBlue: 10991
Crypto: 11226
RayTrace: 6761
EarleyBoyer: 11968
RegExp: 904
Splay: 9461
NavierStokes: 15932

Chromium

Score: 7298

Richards: 10584
DeltaBlue: 14030
Crypto: 13852
RayTrace: 8836
EarleyBoyer: 19236
RegExp: 2368
Splay: 3268
NavierStokes: 2974

Firefox 17.0.1

Score: 5695

Richards: 6499
DeltaBlue: 7061
Crypto: 9931
RayTrace: 3211
EarleyBoyer: 7682
RegExp: 1447
Splay: 7603
NavierStokes: 8945

Octane v1 Benchmark

最后是 Octane 的测试结果。Octane Benchmark 的结果是一个分数,得分越高越好。总体得分来看,Chromium > Firefox 18.0 > Firefox 17.0.1。

关于这个Benchmark,Mozilla的开发人员Nicholas Nethercote并不认可,发表了一篇博客,认为测试程序的选取不具有代表性,过度的考虑了Chrome Apps。

测试地址:http://octane-benchmark.googlecode.com/svn/latest/index.html

Firefox 18:

Octane Score: 6754
Richards 8977
Deltablue 9984
Crypto 9910
Raytrace 6326
EarleyBoyer 11472
Regexp 634
Splay 9192
NavierStokes 15768
pdf.js 3452
Mandreel 6184
GB Emulator 8755
CodeLoad 7924
Box2DWeb 6940

Firefox 17:

Octane Score: 5618

Richards 6365
Deltablue 7425
Crypto 9962
Raytrace 3217
EarleyBoyer 7217
Regexp 1410
Splay 7896
NavierStokes 8877
pdf.js 4050
Mandreel 5447
GB Emulator 5096
CodeLoad 8622
Box2DWeb 5306

Chromium 18.0

Octane Score: 7735

Richards 8804
Deltablue 14116
Crypto 13961
Raytrace 9028
EarleyBoyer 19073
Regexp 2419
Splay 3726
NavierStokes 3112
pdf.js 10526
Mandreel 7992
GB Emulator 11014
CodeLoad 8310
Box2DWeb 5498

说明

  • 测试的机器的配置是 Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz, 8G DDR2, Ubuntu 10.04 x86_64。
  • 我机器上的 Chromium 的版本号似乎比 Chrome 的小,不确定是不是最新的版本(用的 stable release channel),对于测试结果有影响。
  • 发现默认情况下Firefox 17和Firefox 18不会同时运行。Firefox在启动的时候会检查一下是否已经有了Firefox进程,如果有的话就不开新的进程了。这使得在测试的时候必须先关闭所有的Firefox浏览器窗口才能够换一个版本。为了避免乌龙我在每次测试之前,通过“About Firefox”菜单确认了版本。
  • 这个测试结果仅限于Linux,在Windows环境下或许是完全另外的一个结果。相比而言各个浏览器对于Linux环境下的性能优化都不是很上心,小小失落。

Hello Raspberry Pi, Hello 2013

January 9th, 2013 No comments

这是本博客2013年的第一篇博客,献给刚入手的树梅派(Raspberry Pi,RBP) 🙂

拿到手的第一件事情就是浏览器性能测试。下载 Mozilla 源代码,编译 SpiderMonkey Shell(jsshell)进行测试。我使用的OS是树梅派官网的镜像包,按照SpiderMonkey的wiki一路走下来就可以编译成功。

编译的时间意外的长,超过了一个小时。

下面是SunSpider测试集的结果。每个测试都跑了100次,没有设置jsshell命令行参数。看起来树梅派的性能还是不太给力,可能是不太适合做计算密集型的工作。

SunSpider-1.0 测试集结果(在我的PC上是200ms,速度相差了46倍)

============================================
RESULTS (means and 95% confidence intervals)
——————————————–
Total: 9231.6ms +/- 0.3%
——————————————–

3d: 1691.6ms +/- 0.6%
cube: 588.9ms +/- 0.5%
morph: 409.0ms +/- 2.1%
raytrace: 693.7ms +/- 0.3%

access: 1171.5ms +/- 0.8%
binary-trees: 189.2ms +/- 1.4%
fannkuch: 277.4ms +/- 0.1%
nbody: 313.6ms +/- 0.7%
nsieve: 391.3ms +/- 1.8%

bitops: 527.2ms +/- 0.1%
3bit-bits-in-byte: 46.5ms +/- 0.3%
bits-in-byte: 168.1ms +/- 0.2%
bitwise-and: 158.3ms +/- 0.1%
nsieve-bits: 154.3ms +/- 0.3%

controlflow: 58.8ms +/- 0.3%
recursive: 58.8ms +/- 0.3%

crypto: 975.4ms +/- 0.7%
aes: 605.6ms +/- 0.9%
md5: 241.1ms +/- 0.5%
sha1: 128.8ms +/- 0.7%

date: 1349.5ms +/- 0.3%
format-tofte: 758.5ms +/- 0.4%
format-xparb: 591.0ms +/- 0.4%

math: 861.2ms +/- 0.6%
cordic: 219.7ms +/- 0.1%
partial-sums: 485.7ms +/- 0.9%
spectral-norm: 155.7ms +/- 1.1%

regexp: 289.1ms +/- 0.1%
dna: 289.1ms +/- 0.1%

string: 2307.3ms +/- 0.5%
base64: 275.6ms +/- 1.5%
fasta: 344.2ms +/- 1.2%
tagcloud: 673.9ms +/- 0.4%
unpack-code: 732.1ms +/- 0.6%
validate-input: 281.5ms +/- 0.9%

 

ubench测试集结果:

============================================
RESULTS (means and 95% confidence intervals)
——————————————–
Total: 13391.6ms +/- 0.9%
——————————————–

function: 9965.3ms +/- 1.2%
closure: 674.9ms +/- 2.3%
empty: 1078.0ms +/- 0.1%
correct-args: 1093.7ms +/- 0.1%
excess-args: 3940.2ms +/- 2.1%
missing-args: 2370.2ms +/- 2.8%
sum: 808.4ms +/- 0.1%

loop: 3426.2ms +/- 0.1%
empty-resolve: 182.4ms +/- 0.2%
empty: 1506.0ms +/- 0.1%
sum: 1737.8ms +/- 0.1%

 

v8-v4测试集结果:

============================================
RESULTS (means and 95% confidence intervals)
——————————————–
Total: 9294.2ms +/- 0.4%
——————————————–

3d: 1702.0ms +/- 0.7%
cube: 591.4ms +/- 0.4%
morph: 410.5ms +/- 2.2%
raytrace: 700.0ms +/- 0.4%

access: 1175.1ms +/- 0.7%
binary-trees: 190.6ms +/- 1.4%
fannkuch: 280.4ms +/- 0.3%
nbody: 315.6ms +/- 0.7%
nsieve: 388.5ms +/- 1.6%

bitops: 530.1ms +/- 0.2%
3bit-bits-in-byte: 46.8ms +/- 0.4%
bits-in-byte: 169.1ms +/- 0.3%
bitwise-and: 159.4ms +/- 0.3%
nsieve-bits: 154.7ms +/- 0.4%

controlflow: 59.1ms +/- 0.4%
recursive: 59.1ms +/- 0.4%

crypto: 982.6ms +/- 0.6%
aes: 610.9ms +/- 0.9%
md5: 242.9ms +/- 0.6%
sha1: 128.8ms +/- 0.5%

date: 1361.7ms +/- 0.3%
format-tofte: 763.2ms +/- 0.3%
format-xparb: 598.5ms +/- 0.5%

math: 868.8ms +/- 0.7%
cordic: 220.9ms +/- 0.2%
partial-sums: 490.7ms +/- 1.0%
spectral-norm: 157.2ms +/- 1.1%

regexp: 291.2ms +/- 0.2%
dna: 291.2ms +/- 0.2%

string: 2323.7ms +/- 0.5%
base64: 277.0ms +/- 1.6%
fasta: 346.5ms +/- 1.1%
tagcloud: 678.3ms +/- 0.4%
unpack-code: 737.7ms +/- 0.6%
validate-input: 284.1ms +/- 1.1%

 

这是目前的一些简单的心得:

  • 我的树梅派是在淘宝上买的,中国版B,512M内存,价格319,加上一个8G Class10的SD卡和快递,390元。在Element14上也有卖的,价格298,不知道有没有加快递和税收。淘宝卖家简单直接,不还价,总体感觉不错。
  • 第一次启动的时候需要初始化一下,这个时候是需要外接到显示器的,可以用HDMI-VGA转接头接到显示器上,或者用视频线直接接到电视机上。我是直接外接到电视机,设置好了IP地址,SSH登录就OK了。新买HDMI-VGA价格在30~120不等。
  • RBP手册要求供电USB输出750mA以上。我用普通的USB手机充电器做的电源,600mA输出,同时接USB无线键鼠、网线和电视机没有问题。但是HDMI转VGA的时候显示器总是闪,不知道是不是功率的问题。
  • 在电视机上开Firefox测试SunSpider,需要很久才有结果,没有耐心测试完。