GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
45楼#
发布于:2011-04-13 18:43
但是,我还是要说,这样的“优化”,不是真的“优化”,而是“作弊”。原因就在于,因为我已经事先知道它的代码,做优化的实际是我,而不是浏览器。这样的“优化”,和开发工具编译器的“优化”完全不同。编译器事先根本不知道代码是什么样子,所以,编译器是真的对程序代码做分析,根据不同的代码做不同的优化。对浏览器的 javascript 测试来说,要想避免浏览器作弊,就不能完全使用固定的数字,每次测试要传递不同的数字,测试结束后将浏览器的结果传回服务器做比对,确认结果是不是正确。另外,要做到每一行测试代码都是必要的,少执行任何一行代码,得到的结果都是错误的。
Jack
小狐狸
小狐狸
  • UID7249
  • 注册日期2005-07-12
  • 最后登录2011-04-15
  • 发帖数16
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
46楼#
发布于:2011-04-13 18:43
每次测试得出不同结果,还能做benchmark吗?
有哪个JS测试能确保浏览器执行了所有代码?把测试结果传回服务器做比对,确认结果正确与否,或者说保证浏览器没有作弊,又哪个JS测试做到了?
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
47楼#
发布于:2011-04-13 18:43
每次测试得出不同结果,为什么不能做benchmark?变化的只是变量的值,只要每次做的运算是一样的,每次运算的次数也是一样的,就可以了。javascript benchmark 的目的,是考察浏览器执行javascript代码的效率,比如执行 m+n,每一次 m 和 n 的值都不一样,运算的结果也不一样,但是这对 javascript 代码的运算、效率没有任何影响。
因为测试的代码是透明的,所以要写出一个好的测试,能够尽量的不让浏览器作弊,也不是容易的事情,这需要一些经验很丰富的程序员才能做到。目前的几个JS测试,我之前从没去看它们的代码(也用不着去看)。所以它们有哪些漏洞可以让浏览器去作弊,我就不清楚了。
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
48楼#
发布于:2011-04-13 18:43
作为javascript代码测试网页,考察浏览器对javascript代码的优化能力,也是一个重要的环节。注意,我这儿说的是真正的优化。比如,测试网页故意在一些地方放置一些无用的代码,这些无用的代码,每次测试时所在的位置都是不同的。而且,无用代码本身,也是变化的,而不是固定的语句。比如这次加入 var A=10,B=7,var C=A*B; 下次变成 var X=9,S=23,var Z=S*X; 这样,如果浏览器无法优化,就是执行每一行语句,如果可以优化,就会跳过无用的代码。
Jack
小狐狸
小狐狸
  • UID7249
  • 注册日期2005-07-12
  • 最后登录2011-04-15
  • 发帖数16
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
49楼#
发布于:2011-04-13 18:43
允许每次测试得出不同结果,即就算参与测试的程序没有问题,但结果出现波动,甚至较大的波动也不奇怪了。而不能提供基准参考点,也能做benchmark,真是头一次听说。

浏览器的各种性能测试里,主动加入的无用代码,硬说有的话,检测用户使用的浏览器版本、当前窗口大小可以算吧,只是这些不会让测试结果变生什么变化。
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
50楼#
发布于:2011-04-13 18:43
也许你不是写程序的,也许你写程序的时间不是很长,对我说的无法理解,是正常的。同样,你也许还没有搞清楚怎样算是优化,怎样算是作弊。如果相同或者相似的代码,在任何网页中,浏览器都能做出优化,那就是真的优化。如果只有在某个特定的网页中才能得到优化,那就是作弊。比如下面2段代码,实际是相同的:
function FunA(A) {
    A*=2;
    var B = 0;
    for(var n=0; n<100000; n++) {
        B = B*n;
    }
    return A;
}

function FunA(A) {
    A*=2;  var Sum = 0;
    for(var num=0; num<100000; num++) {
        Sum = Sum*num;
    }
    return A;
}

2段代码,实际是相同的,只是中间的变量名换掉了,实际都可以优化成:
function FunA(A) {
    A*=2;
    return A;
}

在一个测试网页中,包含的是第一段代码,如果浏览器优化成第三段代码了,不对中间的无用代码做运算,这个时候不能确认是真的优化还是作弊。如果将代码换成第二段的代码,浏览器仍然不执行中间的无用代码,那就是真的优化了。但是如果换成第二段后浏览器不能做优化了,那就是作弊。
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
51楼#
发布于:2011-04-13 18:43
benchmark 的基准点,就是所有程序执行相同的运算,相同的次数。对于数学运算 A+B,A和B是变量,如果一个程序执行的是3+2,另一个程序执行的是4+5,那么对两个程序来说,是完全公平的。但如果代码是
function FunA(n) {
    var A=0;
    for(var i=0; i<n; i++) {
        A = A*n;
    }
    return A;
}

那么当变量 n 不同的话,执行循环的次数就不同,这样就变成不公平了,所以上面的代码不能用来做 benchmark。
Jack
小狐狸
小狐狸
  • UID7249
  • 注册日期2005-07-12
  • 最后登录2011-04-15
  • 发帖数16
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
52楼#
发布于:2011-04-13 18:43
如果相同或者相似的代码,在任何网页中,浏览器都能做出优化,那就是真的优化。如果只有在某个特定的网页中才能得到优化,那就是作弊。

一样的代码,其测试结果无论是真正做了优化、还是作弊,都是程序自身的事,对吗?

benchmark 的基准点,就是所有程序执行相同的运算,相同的次数。

v8 benchmark对参与测试的程序给出了相同次数的运算。再问一次:v8 benchmark有什么严重bug?

如果v8 benchmark的bug在于:不能检查浏览器是否作弊,请问哪个js benchmark做到了?是否不能检查浏览器是否作弊的js benchmark都有严重bug?
msky
千年狐狸
千年狐狸
  • UID14649
  • 注册日期2006-09-21
  • 最后登录2024-10-16
  • 发帖数2960
  • 经验167枚
  • 威望0点
  • 贡献值12点
  • 好评度9点
  • 社区居民
53楼#
发布于:2011-04-13 18:43
真服了某些人了,既然说不得为什么还要跑这里来委屈自己呢?不解。

天上地下,唯V8独尊,别人都有bug就V8完美无缺,这个回答满意否?
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
54楼#
发布于:2011-04-13 18:43
后面的很多回复,我说的都是测试网页怎样避免浏览器作弊,怎样测试浏览器是否能够做到真正的优化,讨论的是测试应该考虑的东西。可是某人就是死死盯着什么bug不放,我真是服了他了。

至于说“v8 benchmark对参与测试的程序给出了相同次数的运算 ”,我可以负责任的告诉你,V8不是每次都做相同次数的运算。base.js 中的RunSingleBenchmark函数,用的是循环,当测试时间少于1秒时就继续循环做测试,直到超过1秒才停止循环,累计循环次数与花费的时间。调用RunSingleBenchmark的地方,检查循环次数,如果循环次数小于32,就继续调用RunSingleBenchmark测试,否则就给出这项测试的成绩,开始下一个测试,测试成绩计算的是一次循环花费的时间(取多次的平均值),但是循环次数在各个浏览器运行V8时可能都不相同(即使是同一个浏览器也有可能不同)。因为计算的是一次循环花费的时间(取多次的平均值),所以这一点上也是公平的。
bingyuan
火狐狸
火狐狸
  • UID35064
  • 注册日期2011-01-12
  • 最后登录2015-03-14
  • 发帖数128
  • 经验28枚
  • 威望0点
  • 贡献值4点
  • 好评度0点
  • 社区居民
  • 忠实会员
55楼#
发布于:2011-04-13 18:43
@GOLF-AT,我这帖子就是事实,你还跟他争什么?

劳资就TMD不懂了,为什么国内总有些213,自己用着什么东西就非要说人家的不好,自己用的东西也容不得别人说不好?驱动之家,还有各大论坛,里面一堆一堆的213,又是什么Intel与AMD哪家的处理器好啦,又是AMD与nVidia哪家的显卡好啦,又是Windows和Linux哪个好啦,又是Firefox与Chrome那个好啦,等等等等,人家不同意,然后就开骂,屡现战帖。MD劳资就没见老外为这些事情开骂,劳资就不懂了,好像他们用着哪家的东西,那家就是他们的主子,他们主动为商家当狗,免费给人家做五毛,这就是奴性啊!

抱歉,屡次见到国人的不堪表现,心里总憋着火气,如果犯了某些神/帝的忌讳,请莫要开骂。
咪姆
非常火狐
非常火狐
  • UID2913
  • 注册日期2005-02-10
  • 最后登录2022-12-13
  • 发帖数951
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
  • 社区居民
  • 忠实会员
56楼#
发布于:2011-04-13 18:43
惊现V8忠犬


xunleiman
小狐狸
小狐狸
  • UID26827
  • 注册日期2008-10-27
  • 最后登录2012-03-16
  • 发帖数79
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
57楼#
发布于:2011-04-13 18:43
网址里regress是什么东东
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
58楼#
发布于:2011-04-13 18:43
刚刚在 https://wiki.mozilla.org/TypeInference 看到,Firefox 5.0 要加入 TypeInference 引擎,但是 5.0 只是初步实现 TypeInference,更多的优化会在之后的版本(6.0 及7.0)中实现。
dawlen
狐狸大王
狐狸大王
  • UID34286
  • 注册日期2010-10-20
  • 最后登录2015-05-28
  • 发帖数311
  • 经验15枚
  • 威望0点
  • 贡献值8点
  • 好评度0点
  • 社区居民
59楼#
发布于:2011-04-13 18:43
神马都是浮云。。。
网速第一,CPU第二,浏览器第三。。。。
----------------------
呃,奇怪啦,快速回复点“提交”怎么没反应???
游客

返回顶部