Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这两条JS线中哪一条成本更低?_Javascript_Performance - Fatal编程技术网

Javascript 这两条JS线中哪一条成本更低?

Javascript 这两条JS线中哪一条成本更低?,javascript,performance,Javascript,Performance,假设布尔矩阵[x][y][z]在10%的时间内为真。哪些替代方案更有效 if (booleanMatrix[x][y][z]) booleanMatrix[x][y][z] = false; // alternative 1 booleanMatrix[x][y][z] = false; // alternative 2 这两个选项在我的程序[/edit]的上下文中提供相同的功能[edit]。备选方案1在可能重写之前首先检查该值。备选方案2直接写出来。因此,我假设这归结为访问变量值的成本是否小

假设布尔矩阵[x][y][z]在10%的时间内为真。哪些替代方案更有效

if (booleanMatrix[x][y][z]) booleanMatrix[x][y][z] = false; // alternative 1
booleanMatrix[x][y][z] = false; // alternative 2
这两个选项在我的程序[/edit]的上下文中提供相同的功能[edit]。备选方案1在可能重写之前首先检查该值。备选方案2直接写出来。因此,我假设这归结为访问变量值的成本是否小于编辑它的成本。是吗


编辑:在我的程序的其他地方,一个未定义的布尔矩阵[x][y][z]被视为false。这就是为什么备选方案1不会在我的计划中产生不良后果的原因

以前没有测试的写作速度似乎更快:

备选方案2当然更有效

在两个不同的操作中打破这两个选项:

if (booleanMatrix[x][y][z])


第一个备选方案是操作1+操作2,第二个备选方案是操作2,因此,备选方案2将始终更快,问题是,它是否适用于您需要的功能?

备选方案1将始终需要稍长的时间来执行,因为它必须通过
if()
的逻辑运行。只有在以下情况下,这两种情况是相等的:

  • 如果
    if()
    station没有花时间进行评估
  • 或者如果JavaScript引擎优化了备选方案1,使其等于备选方案2

有很多非常灵活的基准测试工具,非常适合这种情况。具体来说,我建议使用jsperf。下面是我为此场景编写的一个测试:

运行此测试后,得出的结论是,通常情况下,无测试编写是更有效的选择

注意:我的一些测试结果与Renato()的结果相冲突。这样做的原因可能与他的测试使用了不同比例的真与假有关。或者他用一个一维数组进行测试,而我的测试用的是三维数组

所以,你应该注意到这个结果不是很可靠。似乎还有许多其他因素实际上比你所问的具体问题更重要。对于不同维度的数组、不同真假比率的数组、不同的浏览器等,这些结果可能会有很大差异


似乎最终,性能差异并不是特别显著。但是,您可以编写更多特定于您的场景的测试,以获得更明确的结果。

这两个备选方案具有相同的功能。
”不,它们不是。如果
布尔矩阵[x][y][z]
未定义或是
0
null
NaN
'
,第一个不会覆盖它,后者会覆盖它。你是对的。我更新了我的问题以澄清我的意思。这个问题的答案是具体实现的。现在成立的可能不会在明年或前年成立。最好花10分钟写一个基准测试,然后自己得到答案。@Teemu或
未定义
。永远忘记一个!真正的问题是如果不检查它不会影响你的程序,那么你为什么还要检查它呢?您也可以添加一些行,如
var s=0+'abc'
,因为这些行也不会影响您的程序。实际上,如果您更新Renato的测试以使用正确的真/假值比率(请参阅),则它与您的测试一致,因此这可能是问题所在。请注意,该页面上的图表显示了两者完全相同的数字,这不是我运行它时看到的结果-图形中似乎出现了一些错误。回答很好。我不知道有这样有用的工具存在,我将稍微研究一下,以确定备选方案1确实是最有效的。非常感谢。实际上,一维数组只会使结果不如三维数组明显。我仍然相信这个答案是错误的。@AlexW为什么你认为它是错误的?在下面的回答中,您声称alt 2更有效,因为它不运行if语句。您是否考虑到该条件只有10%的时间是正确的?@user3324865现在这并不错误,因为如果您查看编辑历史记录,他将答案从效率较低更改为效率较高。
booleanMatrix[x][y][z] = false;