哪个JS基准站点正确?

Ven*_*ryx 9 javascript performance benchmarking jsperf

我在jsperf.com和jsben.ch上创建了一个基准,但是它们给出的结果却大不相同。

JSPerf:https:
//jsperf.com/join-vs-template-venryx JSBench:http://jsben.ch/9DaxR

请注意,代码块完全相同。

在jsperf上,块1比最快的块“慢61%”:

在jsbench上,块1仅比最快的块慢32%:((99-75)/ 75)

是什么赋予了?我希望基准站点至少在百分之几之内能给出相同的结果。

就目前情况而言,由于不一致,我无法得出哪种选择最快的结论。

编辑

基准的扩展列表:

不知道哪个是最好的,但是由于Job提到的原因,我跳过了jsben.ch(最后一个):它不显示运行次数,错误余量或每秒的操作数-对于估算绝对的性能影响以及实现基准站点和/或浏览器与浏览器版本之间的稳定比较至关重要。

(目前,http://jsbench.me是我的最爱。)

Mir*_*šić 8

很抱歉遇到了问题,但对于在搜索结果中遇到此问题的其他人来说可能会很有趣。

我不能代表其他人,但 jsbench.me 只是使用 benchmark.js 进行测试。它是一个单页 React 应用程序,这意味着它可以完全在您的浏览器和您选择的引擎上运行,因此结果在单个浏览器中应该是一致的。您可以在 Firefox 或移动设备中运行它,结果当然会有所不同。但是除了用于存储结果的 AWS DynamoDB 之外,服务器上绝对没有与测试相关的任何内容。

PS我是作者,所以只有个人的激情项目。目前我不需要花费任何费用,因为它针对无服务器进行了优化,并且适合 AWS 免费套餐。工作量与用户数量成正比:)

  • @gman,是的,我知道这一点。从技术上讲,修复它非常容易,配置已准备就绪,但从财务角度来看,我有各种限制来将其保持在 AWS 免费套餐限制内。我正在寻找某种最低限度的货币化方式来解除这些限制。应该是捐款吧 密切关注它,我希望在接下来的几个月内改变它。或者只需订阅此问题,您就会收到通知:https://github.com/psiho/jsbench-me/issues/24 (2认同)

Job*_*Job 6

2019年3月更新: Firefox和Chrome之间的结果不一致 -perf.zone在Chrome上表现异常,jsben.ch在Firefox上表现异常。直到我们确切知道为什么最好的方法是在多个网站上进行基准测试(但我仍然跳过jsben.ch,其他网站至少为您提供了一些错误裕度和运行次数的统计信息,依此类推)

TL; DR:perf.zonejsbench.github.io上运行您的代码(请参阅此处此处),结果与jsperf非常匹配。就个人而言,由于除这些结果以外的其他原因,我比jsben.ch更信任这三个网站。

最近,我也尝试对字符串连接的性能进行基准测试,但就我而言,它是在1000000+个单个字符串中构建一个字符串(join('')对于如此大的数字必胜,btw)。在我的机器上,jsben.ch超时而不是给出结果。也许对您来说效果更好,但是对我来说,这是一个很大的警告信号:

http://jsben.ch/mYaJk

http://jsbench.github.io/#26d1f3705b3340ace36cbad7b24055fb

https://run.perf.zone/view/join-vs-concat-when-dealing-with-very-long-lists-of-single-character-strings-1512490506658

(对不起,我不必not all tests inserted再再次处理jsperf 了,对不起)

目前,我怀疑但无法证明 perf.zone具有稍微更可靠的基准数字:

  • 优化lz-string时,我使用jsbench.github.io的时间很长,但是在某些时候,我注意到某些类型的代码存在不可思议的错误余量,超过100%。

  • 使用jsperf.com和perf.zone可以在移动设备上运行基准测试很好,但是jsbench.github.io有点笨拙,并且在运行测试时CSS会中断。

也许这两件事是相关的:也许jsbench.github.io用于更新DOM的方法引入了某种会影响基准的开销(它们应该进行元基准测试……)。

注意:perf.zone并非没有缺陷。尝试保存基准时有时会超时(最差的时间...),您只能派生自己的代码,而不能对其进行编辑。但是输出似乎仍然与jsperf更加一致,并且它具有用于丢弃基准测试的非常好的“快速”模式


gma*_*man 5

据我所知,一个问题是各种 JavaScript 引擎根据环境进行的优化差异很大。

我对完全相同的函数进行了测试,该函数根据创建函数的位置产生不同的结果。换句话说,例如,在一项测试中

const lib = {}
lib.testFn = function() {
   ....
}
Run Code Online (Sandbox Code Playgroud)

而在其他方面则是

const lib = {
 testFn: function() {
   ....
 },
};
Run Code Online (Sandbox Code Playgroud)

而在另一个则是

function testFn() {
   ....
}

const lib = {}
lib.testFn = testFn
Run Code Online (Sandbox Code Playgroud)

同一浏览器中的重要函数的结果存在 >10% 的差异,而不同浏览器的结果则不同。

这意味着没有 JavaScript 基准测试是正确的,因为基准测试运行测试的方式(如测试工具本身)会影响结果。例如,该工具可能会 XHR 测试脚本。可能会调用 eval。可能会在工作人员中运行测试。可能会在 iframe 中运行测试。JS 引擎可能会以不同的方式优化所有这些。