我在这个网站http://jsperf.com/上进行了测试

我想要一些人解释一下
我正在用jsperf(这里)改进我的一些脚本的性能的第一步.
我想知道是否有可能删除/删除我意外发布的测试版本 - 它们已被破坏且无法使用,因此:
问题:
假设我在进行修订5时想出它是如何工作的 - 有没有办法删除修订版1-4?
谢谢!
如果我执行以下操作:
var abs = Math.abs;
不abs(-10)应该快Math.abs(-10)?因为abs是直接调用的.
这就是我的注意力:
Math.abs vs自定义abs功能

更新:
在Internet Explorer 11中执行的相同测试显示了完全不同的结果:

我推测这是由于对Chrome V8引擎内置功能的一些优化.
首先,我做了一个快速的jsperf测试用例来显示明显的:
Object.create(null)比使用{}语法创建对象慢.
http://jsperf.com/js-object-creation-null-proto
但鉴于这一事实,前一种情况有时可能是优化和性能的一个很好的选择吗?换句话说,操纵最轻量级的js对象可以提高性能,因此在某些情况下使用它成为一个合理的选择.
我指的是你要大量访问对象属性的情况,或者大量使用for in循环.
这种方法是否有太大的风险,无法在库中使用,人们可能会导致这些对象不具备标准Object原型所带来的标准属性?
另外,你知道另一种(更快)的方法来创建最轻量级的js对象吗?
PS:我做了一个简短的测试用例来说明使用Object.create(null)和访问属性比使用更快一些的情况{}.
http://jsperf.com/js-object-creation-and-accessing-properties
我测试了2个ID选择器之间的差异,第一个是正常的:$('#lol')
第二个是相同的但放在多个括号之间:$((((('#lol')))))
我使用firefox和chrome在jsperf上启动了测试.结果很有趣:使用firefox,第一个(普通选择器)慢40%(!!!).使用铬,第二个慢0.84%.
为何如此不同?有人可以解释一下吗?
jsperf.com可靠吗?
你可以在这里看到测试:
我将测试其他浏览器,以获得乐趣.
(编辑:顺便说一下,我在Mac OS X上)
任何人都可以解释为什么通过字符串创建对象比同一个对象慢,并在jQuery中执行addClass()方法?
我认为addClass()方法会慢一点,但事实并非如此.我想知道为什么?
看看这个jsPerf - http://jsperf.com/jquery-append-with-class-and-with-method-addclass
我想在JavaScript中删除数字的符号.以下是我在jsperf上检查过的测试用例(http://jsperf.com/remove-sign-from-number)
if(n < 0) n *= -1;
if(n < 0) n = -n;
n = Math.abs(n)
(n < 0) && (n *= -1)
(n < 0) && (n = -n)
n = Math.sqrt(n*n)
Run Code Online (Sandbox Code Playgroud)
根据这些测试:if(n < 0) n *= -1似乎是一个很好的解决方案.
你知道更好,更省,更有效的方法吗?
编辑1:添加了Nikhil的Math.sqrt情况,但sqrt在大多数系统中通常都很慢.
编辑2: Jan的按位运算建议在某些情况下可能会更快,但也会删除小数位,因此对我不起作用.
在第一个例子中,我创建了长度为1000的空数组:
var arr = new Array(1000);
for (var i = 0; i < arr.length; i++)
arr[i] = i;
Run Code Online (Sandbox Code Playgroud)
在第二个示例中创建了长度为0的空数组:
var arr = [];
for (var i = 0; i < 1000; i++)
arr.push(i);
Run Code Online (Sandbox Code Playgroud)
在OS X 10.10.3上的Chrome 41.0.2272.118中进行测试,第一个块运行得更快.为什么?因为JavaScript引擎知道数组大小?
基准测试在这里http://jsperf.com/poerttest/2.
我正在测试一个我的朋友注意到的测试用例。他在循环中使用window.innerheight,并且fps大幅下降。
这是我为测试它而创建的jsperf的链接http://jsperf.com/innerheight
我能提出的唯一解释是,这是一个吸气剂,并在每次调用时计算实际高度。那正确吗?我可以在此验证任何文档吗?
这是将数组的值恢复为简单值true或false值的最佳方法。
作为jsperf是给我,我很困惑非常比谷歌浏览器控制台的NodeJS,或任何其他JS引擎带给我不同的结果。(此处为jsperf片段)
这是代码段,您可以看到(可以在此处运行)some比使用foreach循环快100倍
var array = [];
var i = 0;
var flag = false;
while (i< 100000) {
array.push(Math.random()*10000);
i++;
}
console.time('forEach');
array.forEach((item) => {
if (!flag && item > 10000/2) {
flag = true;
return;
}
return false
});
console.timeEnd('forEach');
console.log(flag);
flag = false;
console.time('some');
flag = array.some((item) => {
if (item > 10000/2) {
return true;
}
return false
});
console.timeEnd('some');
console.log(flag);Run Code Online (Sandbox Code Playgroud)
问题是,为什么JSPERF给出的结果与chrome的控制台,nodejs或任何其他JS引擎不同?
编辑:正如我对下面问题的回答所指出的那样,此行为是有问题的,因为 …
jsperf ×10
javascript ×8
performance ×8
jquery ×3
arrays ×2
append ×1
benchmarking ×1
class ×1
numbers ×1
object ×1
optimization ×1
signed ×1
testing ×1
v8 ×1