Javascript 当我们更改执行顺序时,performance.now()返回不同的值
我只是想看看使用Javascript 当我们更改执行顺序时,performance.now()返回不同的值,javascript,performance,performance-testing,Javascript,Performance,Performance Testing,我只是想看看使用|(双管,短路操作符,应该更快)而不是|时的性能差异 但结果并没有给出实际性能改进的细节。如果我们只是对下面的代码重新排序..首先使用执行控制台日志,那么它将显示比另一个更多的时间 使用此方法或任何其他方法,我如何看到性能差异?而且 有人能解释一下为什么我们改变订单时会有差异吗 如果performance.now()的行为是这样的,我看不出使用它有什么意义 请帮忙。谢谢:) var t3=performance.now(); 控制台日志(1 |(1), 1 || (0),
|
(双管,短路操作符,应该更快)而不是|
时的性能差异
但结果并没有给出实际性能改进的细节。如果我们只是对下面的代码重新排序..首先使用
执行控制台日志,那么它将显示比另一个更多的时间
performance.now()代码>的行为是这样的,我看不出使用它有什么意义
var t3=performance.now();
控制台日志(1 |(1),
1 || (0),
1 || (-1),
1 | |(“字符串”),
1 || (""),
1 | |(空),
1 | |(未定义),
1 | |(console.log(3)),
1 | |(无穷大))
var t4=性能。现在();
log(“使用(双精度)调用”| |“花费”+(t4-t3)+“毫秒”);
var t0=performance.now();
控制台日志(1 |(1),
1 | (0),
1 | (-1),
1 |(“字符串”),
1 | (""),
1 |(空),
1 |(未定义),
1 |(console.log(3)),
1 |(无穷大))
var t1=performance.now();
log(“使用单个| take“+(t1-t0)+”毫秒进行的调用”)代码>
使用此方法或任何其他方法,我如何看到性能差异
有人能解释一下为什么我们改变订单时会有差异吗
做很多测试。单个测试(尤其是耗时很少的测试)极有可能受到浏览器或操作系统的干扰,这些操作系统可能会在任何时候决定暂停执行、执行其他操作,然后再回来
让环境暖和起来。几乎所有输入/输出(如console.log
)都需要初始化,这将在第一次使用时完成,这很容易将测量的性能破坏几个数量级
去掉所有不属于你测试的东西。如果要比较|
与|
,则不要在正在计时的块中包含控制台.log
一些演示:
运行以下代码几次。注意:
通常(但并非总是)第一次需要更长的时间。那是初始化
有时,一个所花的时间是另一个的数倍。那是干扰
var t3=performance.now();
控制台日志(“herp”);
var t4=性能。现在();
var t0=performance.now();
控制台日志(“derp”);
var t1=performance.now();
log(“与herp的调用花费了”+(t4-t3)+“毫秒”);
log(“用derp调用需要”+(t1-t0)+“毫秒”)代码>
使用此方法或任何其他方法,我如何看到性能差异
有人能解释一下为什么我们改变订单时会有差异吗
做很多测试。单个测试(尤其是耗时很少的测试)极有可能受到浏览器或操作系统的干扰,这些操作系统可能会在任何时候决定暂停执行、执行其他操作,然后再回来
让环境暖和起来。几乎所有输入/输出(如console.log
)都需要初始化,这将在第一次使用时完成,这很容易将测量的性能破坏几个数量级
去掉所有不属于你测试的东西。如果要比较|
与|
,则不要在正在计时的块中包含控制台.log
一些演示:
运行以下代码几次。注意:
通常(但并非总是)第一次需要更长的时间。那是初始化
有时,一个所花的时间是另一个的数倍。那是干扰
var t3=performance.now();
控制台日志(“herp”);
var t4=性能。现在();
var t0=performance.now();
控制台日志(“derp”);
var t1=performance.now();
log(“与herp的调用花费了”+(t4-t3)+“毫秒”);
log(“用derp调用需要”+(t1-t0)+“毫秒”)代码>@Siguza不能解释我的问题。(我的错,我选择的傻瓜在严肃的性能测试方面很糟糕。)与任何和所有性能测试一样,你应该1)执行测试至少几千次(如果不是几百万次),2)预热环境,也就是说,在开始测量时间之前,执行数千个您想要测试的操作,并且3)确保将输入/输出功能(即所有控制台.log
)移出测量块,除非您确实想要测量它们。与此无关,为什么要将|
与|
进行比较?他们做的事情不一样。|
和|
做的几乎一样。但是如果left为true,则|
不会检查右侧表达式。所以应该有表现improvement@Mendax因为你的性能测试很差console.log
很容易花费的时间是您所有计算的100倍,第一次调用它可能会触发初始化,而第二次调用它的时间是您的100倍。这就是我所说的“温暖环境”的意思。同样,一次调用并不具有代表性。你应该收集很多(成千上万)的样本,然后看看平均值。其他任何东西都是随机和不可靠的。还要注意,
(按位OR)和|
(逻辑OR)的作用不一样|
将两个操作数转换为有符号32位整数,对它们进行位运算并返回结果| |
检查左操作数是否为真,如果为真,则返回左操作数的值,如果不是真,则返回右操作数的值。如果在布尔上下文中计算(例如If(a | b)
与