Javascript 这两条JS线中哪一条成本更低?
假设布尔矩阵[x][y][z]在10%的时间内为真。哪些替代方案更有效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直接写出来。因此,我假设这归结为访问变量值的成本是否小
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()
的逻辑运行。只有在以下情况下,这两种情况是相等的:
- 如果
station没有花时间进行评估if()
- 或者如果JavaScript引擎优化了备选方案1,使其等于备选方案2
似乎最终,性能差异并不是特别显著。但是,您可以编写更多特定于您的场景的测试,以获得更明确的结果。“
这两个备选方案具有相同的功能。
”不,它们不是。如果布尔矩阵[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;