今天我参观了jsPerf,现在我想知道......
示例:http://jsperf.com/concatenation-vs-join
有人能告诉我吗?
提前致谢.
所以,我正在启动我的第一个基于HTML5浏览器的客户端项目.它必须将非常非常大的文本文件解析成一个或多个对象的数组.我知道我将如何编码呢; 我现在主要关注的是尽可能快地获取解析器代码,而我的主要测试平台是Chrome.然而,在查看子串方法之间的差异时(我很长时间没有触及过JavaScript),我注意到与FireFox相比,Chrome中的这个基准测试速度非常慢.为什么?
我的第一个假设是,它与FireFox的JS引擎处理字符串对象的方式有关,而对于FireFox,这个操作是简单的指针操作,而对于Chrome,它实际上是做硬拷贝.但是,我不确定为什么Chrome 不会做指针操作或为什么FireFox 会.有人有见识吗?
JSPerf似乎丢弃了我的FireFox结果,而不是在BrowserScope上显示它们.对我来说,我.substr()在FF4中获得了9,568,203±1.44%Ops/sec .
编辑:所以我在Chrome下面看到了FF3.5的性能结果.所以我决定测试我的指针假设.这让我进入了我的Substrings测试的第二次修订,它1,092,718±1.62%在FF4中的1,195±3.81%Ops /秒与Chrome中的Ops/sec 相比,速度提高了不到1000倍,但仍然是性能上无法解释的差异.
后记: 不,我不关心舔一下Internet Explorer.我很关心尝试提高自己的技能,并在更深层次上了解这种语言.
我在jsperf测试中看到了一些奇怪的行为.这是设置:
var pro={};
pro._x=3;
var q=Object.create(pro);
q.x=3;
q.z={};
q.z.x=3;
Run Code Online (Sandbox Code Playgroud)
然后,我只是查找每个属性q.x,q._x和q.z.x.
单个查找q.x比q._x预期的原型查找更快.但双重查找q.z.x是最快的.我预计q.z.x会是最慢的,特别是与之相比时q.x.
q.z.x甚至比q.z.这里发生了什么?
我根据HTML5提供的性能对象测量我网站的性能,我想知道我的应用程序出了什么问题,我还想在我的本地数据库中记录其他最终用户的这些性能对象,以便我有信息来自他们的方面,但我不太熟悉每个属性意味着什么,比如可能是connectStart,connectEnd延迟的原因......我根据我的知识创建了一个地图,但我需要社区的输入.这对其他人也很有帮助
var issueList = {
'connectStart': 'Network issue',
'connectEnd': 'Server is not responding fast with SSL handshake',
'domainLookupStart': 'Network issue',
'domainLookupEnd': 'Network issue',
'fetchStart': 'Slow browser',
'redirectStart': 'Network issue',
'redirectEnd': 'Busy server',
'requestStart': 'Network issue',
'responseStart': 'Server is slow',
'domLoading': 'Low internet bandwidth',
'unloadEventStart': 'Slow browser',
'unloadEventEnd': 'Slow browser, browser processes are too heavy',
'navigationStart': 'Slow browser',
'responseEnd': 'Network issue',
'domInteractive': 'Browser issue',
'domContentLoadedEventStart': 'Network issue',
'domContentLoadedEventEnd': 'Network issue',
'domComplete': 'Too much DOM manipulation',
'loadEventStart': 'Unknown',
'loadEventEnd': 'Low JS performance, …Run Code Online (Sandbox Code Playgroud) 刚刚在jsperf中编写了一些测试用例,以便在使用Array.map和其他替代方法时测试命名函数和匿名函数之间的区别.
http://jsperf.com/map-reduce-named-functions
(原谅网址名称,这里没有测试Array.reduce,我在完全决定我要测试的内容之前命名了测试)
一个简单的for/while循环显然是最快的,我仍然感到惊讶的是,速度慢了10倍Array.map......
然后我尝试了mozilla的polyfill https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Polyfill
Array.prototype.map = function(fun /*, thisArg */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var res = new Array(len);
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for (var i = 0; i < len; i++)
{
// NOTE: Absolute …Run Code Online (Sandbox Code Playgroud) 我正在玩jQuery .text()和.html()方法并运行一些简单的jsPerf测试,当我惊讶地发现.html()在检索文本时要快得多:
$div.text() - 88,496次/秒$div.html() - 592,028次/秒为什么.text()比.html()结果相同时要慢得多?什么操作.text()可以.html()跳过来解释这种差异?
我知道每种方法都有不同的目的; 我很好奇他们用于同一目的的情况.
我不相信jsperf测量for循环与forEach性能的结果.至少对我的机器上的chrome和firefox来说,结果与jsperf中广告的结果完全不同.
http://jsperf.com/foreach-vs-loop(我的)
http://jsben.ch/#/BQhED(更受欢迎)
在我的笔记本电脑上运行Ubuntu 11.10我在Firefox中有以下结果:
for: total=1641 ms, avg=164.1 ms
forEach: total=339 ms, avg=33.9 ms
uname -a:
Linux 3.0.0-16-generic #29-Ubuntu SMP Tue Feb 14 12:48:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
很遗憾,Chrome不会返回console.timeEnd()的结果,但Chrome的运行时间相同而且速度更快.我观察到forEach比Chrome中的循环快10倍,在Firefox中快3倍.
在Chrome中,我得到大约这些运行时间:
for: avg=80 ms
forEach: avg=6 ms
Run Code Online (Sandbox Code Playgroud)
这是我在Firefox和Chrome控制台中运行的代码.
var arr = [];
for(var i = 0; i < 100000; i++) arr[i]=i;
var numberOfRuns = 10;
function time(name, f){
console.time(name);
f();
return console.timeEnd(name);
}
function runTest(name, f){
var totalTime = 0;
for(var r = 0; r < …Run Code Online (Sandbox Code Playgroud) 我在这个网站http://jsperf.com/上进行了测试

我想要一些人解释一下
我在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是我的最爱。)
javascript ×10
jsperf ×10
performance ×9
benchmarking ×3
jquery ×2
concat ×1
dom ×1
firefox ×1
html5 ×1
string ×1