【问题标题】:Which one is more efficient - For loop VS if statement哪一个更有效 - For 循环 VS if 语句
【发布时间】:2021-04-13 10:08:27
【问题描述】:

通过小表格循环(表格有 1 到 3 个条目)或使用if 语句检查第二个表格(这个表格更大,可以有数百个条目)来搜索东西会更有效吗? )。

循环表格:

for (var i = 0; i < TableA.length; i++) {
    if (TableA[i].x1 < x && TableA[i].x2 < x && TableA[i].y1 < y && TableA[i].y2 < y then) {
        // process ..
        break;
    }
}

if 语句:

if (tableB[x][y] == true) {
    // process ..
}

我的猜测是带有if 语句的选项更快,但缺点是更大的表需要内存。

【问题讨论】:

  • 你认为什么语言?
  • 如果tableA 的内容增加,我通常会采用循环方式,因为它更清洁 IMO 和未来证明。
  • 嘿,谢谢您的意见。我在节点 js 服务器上工作。我在 2d 游戏中使用它来检查某些事件开始时玩家是否在特定区域。
  • @helvete,也感谢您的编辑建议。我还让我注意到 for 循环中的 if 语句有一个错误。

标签: javascript performance for-loop if-statement logical-operators


【解决方案1】:

谈到实际性能,这通常是一场艰苦的比赛,您应该分析您的代码以检查两种建议方法中的一种是否存在巨大的损失。

if 语句 是 O(1),而 循环表 是 O(n),但正如您已经说过的 n 真的很小(1 到 3),所以很难说哪个版本更快。

这在很大程度上取决于 tableB 的大小:如果表非常大,它可能不适合 CPU 缓存,因此访问可能涉及读取 RAM(或较慢的 CPU 缓存)并且虽然代码仍然是 O(1),但内存访问支配了计算时间。另一方面,tableA 很小,if 语句中涉及的算术运算很简单,CPU 性能可以忽略不计(取决于 CPU 的架构)。

因此,我的建议是使用真实数据集来分析您的代码,以了解是否存在值得优化的性能差异。如果差异足够小,我同意用户 helvete 的观点,并且我会选择循环方式以更加面向未来。

很多年前,我曾经花费大量时间优化不值得的代码,导致脏代码库更难维护。现在我经常想起以下引文:

过早的优化是万恶之源

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2012-04-12
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多