45楼#
发布于:2011-04-13 18:43
但是,我还是要说,这样的“优化”,不是真的“优化”,而是“作弊”。原因就在于,因为我已经事先知道它的代码,做优化的实际是我,而不是浏览器。这样的“优化”,和开发工具编译器的“优化”完全不同。编译器事先根本不知道代码是什么样子,所以,编译器是真的对程序代码做分析,根据不同的代码做不同的优化。对浏览器的 javascript 测试来说,要想避免浏览器作弊,就不能完全使用固定的数字,每次测试要传递不同的数字,测试结束后将浏览器的结果传回服务器做比对,确认结果是不是正确。另外,要做到每一行测试代码都是必要的,少执行任何一行代码,得到的结果都是错误的。
|
|
46楼#
发布于:2011-04-13 18:43
每次测试得出不同结果,还能做benchmark吗?
有哪个JS测试能确保浏览器执行了所有代码?把测试结果传回服务器做比对,确认结果正确与否,或者说保证浏览器没有作弊,又哪个JS测试做到了? |
|
47楼#
发布于:2011-04-13 18:43
每次测试得出不同结果,为什么不能做benchmark?变化的只是变量的值,只要每次做的运算是一样的,每次运算的次数也是一样的,就可以了。javascript benchmark 的目的,是考察浏览器执行javascript代码的效率,比如执行 m+n,每一次 m 和 n 的值都不一样,运算的结果也不一样,但是这对 javascript 代码的运算、效率没有任何影响。
因为测试的代码是透明的,所以要写出一个好的测试,能够尽量的不让浏览器作弊,也不是容易的事情,这需要一些经验很丰富的程序员才能做到。目前的几个JS测试,我之前从没去看它们的代码(也用不着去看)。所以它们有哪些漏洞可以让浏览器去作弊,我就不清楚了。 |
|
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; 这样,如果浏览器无法优化,就是执行每一行语句,如果可以优化,就会跳过无用的代码。
|
|
49楼#
发布于:2011-04-13 18:43
允许每次测试得出不同结果,即就算参与测试的程序没有问题,但结果出现波动,甚至较大的波动也不奇怪了。而不能提供基准参考点,也能做benchmark,真是头一次听说。
浏览器的各种性能测试里,主动加入的无用代码,硬说有的话,检测用户使用的浏览器版本、当前窗口大小可以算吧,只是这些不会让测试结果变生什么变化。 |
|
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; } 在一个测试网页中,包含的是第一段代码,如果浏览器优化成第三段代码了,不对中间的无用代码做运算,这个时候不能确认是真的优化还是作弊。如果将代码换成第二段的代码,浏览器仍然不执行中间的无用代码,那就是真的优化了。但是如果换成第二段后浏览器不能做优化了,那就是作弊。 |
|
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。 |
|
52楼#
发布于:2011-04-13 18:43
如果相同或者相似的代码,在任何网页中,浏览器都能做出优化,那就是真的优化。如果只有在某个特定的网页中才能得到优化,那就是作弊。 一样的代码,其测试结果无论是真正做了优化、还是作弊,都是程序自身的事,对吗? benchmark 的基准点,就是所有程序执行相同的运算,相同的次数。 v8 benchmark对参与测试的程序给出了相同次数的运算。再问一次:v8 benchmark有什么严重bug? 如果v8 benchmark的bug在于:不能检查浏览器是否作弊,请问哪个js benchmark做到了?是否不能检查浏览器是否作弊的js benchmark都有严重bug? |
|
53楼#
发布于:2011-04-13 18:43
真服了某些人了,既然说不得为什么还要跑这里来委屈自己呢?不解。
天上地下,唯V8独尊,别人都有bug就V8完美无缺,这个回答满意否? |
|
54楼#
发布于:2011-04-13 18:43
后面的很多回复,我说的都是测试网页怎样避免浏览器作弊,怎样测试浏览器是否能够做到真正的优化,讨论的是测试应该考虑的东西。可是某人就是死死盯着什么bug不放,我真是服了他了。
至于说“v8 benchmark对参与测试的程序给出了相同次数的运算 ”,我可以负责任的告诉你,V8不是每次都做相同次数的运算。base.js 中的RunSingleBenchmark函数,用的是循环,当测试时间少于1秒时就继续循环做测试,直到超过1秒才停止循环,累计循环次数与花费的时间。调用RunSingleBenchmark的地方,检查循环次数,如果循环次数小于32,就继续调用RunSingleBenchmark测试,否则就给出这项测试的成绩,开始下一个测试,测试成绩计算的是一次循环花费的时间(取多次的平均值),但是循环次数在各个浏览器运行V8时可能都不相同(即使是同一个浏览器也有可能不同)。因为计算的是一次循环花费的时间(取多次的平均值),所以这一点上也是公平的。 |
|
55楼#
发布于:2011-04-13 18:43
@GOLF-AT,我这帖子就是事实,你还跟他争什么?
劳资就TMD不懂了,为什么国内总有些213,自己用着什么东西就非要说人家的不好,自己用的东西也容不得别人说不好?驱动之家,还有各大论坛,里面一堆一堆的213,又是什么Intel与AMD哪家的处理器好啦,又是AMD与nVidia哪家的显卡好啦,又是Windows和Linux哪个好啦,又是Firefox与Chrome那个好啦,等等等等,人家不同意,然后就开骂,屡现战帖。MD劳资就没见老外为这些事情开骂,劳资就不懂了,好像他们用着哪家的东西,那家就是他们的主子,他们主动为商家当狗,免费给人家做五毛,这就是奴性啊! 抱歉,屡次见到国人的不堪表现,心里总憋着火气,如果犯了某些神/帝的忌讳,请莫要开骂。 |
|
56楼#
发布于:2011-04-13 18:43
惊现V8忠犬
|
|
|
57楼#
发布于:2011-04-13 18:43
网址里regress是什么东东
|
|
|
58楼#
发布于:2011-04-13 18:43
刚刚在 https://wiki.mozilla.org/TypeInference 看到,Firefox 5.0 要加入 TypeInference 引擎,但是 5.0 只是初步实现 TypeInference,更多的优化会在之后的版本(6.0 及7.0)中实现。
|
|
59楼#
发布于:2011-04-13 18:43
神马都是浮云。。。
网速第一,CPU第二,浏览器第三。。。。 ---------------------- 呃,奇怪啦,快速回复点“提交”怎么没反应??? |
|