30楼#
发布于:2011-04-13 18:43
jaegermonkey 版刚出了一个小时版,还是没修正 V8 benchmark 的 bug,看来还要等明天早上的小时版。
|
|
31楼#
发布于:2011-04-13 18:43
V8 benchmark 有严重的bug,浏览器可以作弊,提高测试成绩。 照这么说,sunspider也有严重bug,浏览器可以作弊,提高测试成绩。2010年9月,mozilla开发者在blog里指出,IE9 Preview3在SunSpider的math-cordic测试中,至少比别的浏览器快10倍。但对代码做了少量改动后再测试,IE9 Preview3却不能保持同样的表现。 原文链接: http://blog.mozilla.com/rob-sayre/2010/ ... losing-in/ 大概一个多月前,TypeInference在Kraken速度测试上有过大幅上涨,超过了google的V8引擎,同样说明Kraken有严重bug?因为浏览器可以作弊,提高测试成绩。 |
|
32楼#
发布于:2011-04-13 18:43
Jack:照这么说,sunspider也有严重bug,浏览器可以作弊,提高测试成绩。2010年9月,mozilla开发者在blog里指出,IE9 Preview3在SunSpider的math-cordic测试中,至少比别的浏览器快10倍。但对代码做了少量改动后再测试,IE9 Preview3却不能保持同样的表现。 所以太关注跑分成绩是会被骗的。 |
|
|
33楼#
发布于:2011-04-13 18:43
太强了。。。
|
|
34楼#
发布于:2011-04-13 18:43
看来跑分不可全信,经常看到各种跑分。
|
|
35楼#
发布于:2011-04-13 18:43
还是多下功夫夫改善下页面浏览吧,卡得只能调低一级硬件加速开FF~
|
|
36楼#
发布于:2011-04-13 18:43
Jack: sunspider 测试,当时是说,有一段代码对测试结果不产生影响,所以IE对这部分代码做了优化,故意不执行这段代码,所以时间自然就少了。从这个角度来说,这个测试还算不上严重的bug,它只是希望大家都按它的流程来执行,没想到中间有捷径,有人走捷径了。至于V8,不知道它是怎么测试的,三个测试中,V8的成绩最不稳定,上下波动比较大。从昨天那个有问题的Firefox版本来看,V8的问题,显然和sunspider不同。我怀疑它根本就是执行一段代码,没有验证机制(没有验证最后的结果对不对),只是算执行代码的时间。所以Firefox出错了,直接跳过它的代码,时间自然是非常非常的快,成绩才会那么夸张。打个比方,同样是考试,正常的考试,是要在规定的时间内完成,最后还要看每道题做的是否正确。但是如果只看时间,而不管做的是否正确,这样的考试有用么? |
|
37楼#
发布于:2011-04-13 18:43
|
|
38楼#
发布于:2011-04-13 18:43
|
|
39楼#
发布于:2011-04-13 18:43
》我解除了鲁大师对机子CPU百分之五十的限制之后
你这玩得真前卫啊: 勒着脖子游泳 |
|
|
40楼#
发布于:2011-04-13 18:43
至于V8,不知道它是怎么测试的 对v8代码有什么疑问,可以直接查看JS源码呀,而且v8的每一项测试都在网页上写明了测试的目地和源码行数。 三个测试中,V8的成绩最不稳定,上下波动比较大。 v8的成绩不稳定,和浏览器的JS引擎有关,怪到v8 Benchmark头上就没道理了。可能v8的结果显示的是分数,而sunspider、kraken显示的是时间,才给人成绩不稳的印象? arewefastyet上的成绩都用时间显示,从arewefastyet的测试结果看,无论是32位还是64位的Mac OS X下,v8成绩不稳定的只有Google Chrome的v8引擎,而别的浏览器,如safari和firefox的JS引擎,尤其firefox的不同JS引擎成绩有单独列出,TM、JM、TM+JM、及最新的TI,除少数情况外,在v8上的成绩都很稳定。 至于最后那个比喻,看不懂怎么得出之前那个结论。 原因:浏览器可以作弊,提高测试成绩。 或者说在我个人看来,这结论适用于所有的benchmark。因为某个benchmark的测试过程可以作弊,提高测试成绩,所以此benchmark有严重的bug。 |
|
41楼#
发布于:2011-04-13 18:43
|
|
42楼#
发布于:2011-04-13 18:43
有人说让看代码,我还就真的去看了一下。我自己就是写程序的,虽然不是用 javascript 写程序,但是一般的 javascript 代码还是看得懂的。代码好多,不可能全部看,我只看了一小部分。base.js 中,它自己写了一个函数 Math.random 来代替 javascript 中的函数 Math.random:
Math.random = (function() { var seed = 49734321; return function() { // Robert Jenkins' 32 bit integer hash function. seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff; seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff; seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff; seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff; seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff; seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff; return (seed & 0xfffffff) / 0x10000000; }; })(); 对于这段代码,如果浏览器老老实实,就是按它的代码一行一行的执行,返回运算的结果。但由于这儿函数始终返回一个固定的数字,所以如果浏览器对它做所谓的优化,直接返回计算结果,那么就快很多,但是这样做就可以看作是作弊。为什么这样说,因为如果测试将这儿的代码改动任何一个字符,单纯就这个函数来说,浏览器就无法再做这样的优化,就只能老老实实的运行每一行代码。之前 Mozilla 指责 IE9 在 sunspider 上作弊,道理就和我现在说的类似。 |
|
43楼#
发布于:2011-04-13 18:43
上面的 Math.random 函数,如果将 var seed = 49734321; 中的 49734321 改为当前的时间,那么每次运行得到的结果都不同,浏览器就不能对这个函数做“优化”了(不能直接返回结果)。
|
|
44楼#
发布于:2011-04-13 18:43
但如果更进一步,从全局来看,函数 Math.random 的目的,只是返回一个随机数。调用 Math.random 的地方,根本就不知道 Math.random 返回什么数,不存在验证。所以,从这个层面上说,浏览器还是可以做所谓的优化,无论这儿的 Math.random 代码怎么写,浏览器都可以直接返回任意一个数字(不需要执行 Math.random 中的任何代码),但是测试代码根本就不知道浏览器是直接返回了一个结果,还是真的执行了每一行代码。所以如果我是Firefox的开发者,就可以针对 V8 测试做这样的“优化”,提高它的测试成绩。
|
|