Files
2026-07-13 21:36:17 +08:00

1.7 KiB

title, impact, impactDescription, tags
title impact impactDescription tags
Early Length Check for Array Comparisons MEDIUM-HIGH avoids expensive operations when lengths differ javascript, arrays, performance, optimization, comparison

数组比较的早期长度检查

当通过开销较大的操作(排序、深度相等比较、序列化)来比较数组时,应首先检查长度。如果长度不同,则数组不可能相等。

在实际应用中,当比较操作运行在热路径(事件处理、渲染循环)中时,这种优化尤为有价值。

错误做法(始终执行开销大的比较):

function hasChanges(current: string[], original: string[]) {
  // 始终执行排序和连接,即使长度不同
  return current.sort().join() !== original.sort().join()
}

即使 current.length 为 5 而 original.length 为 100,也会执行两次 O(n log n) 的排序。同时还存在连接数组和比较字符串的开销。

正确做法(先进行 O(1) 长度检查):

function hasChanges(current: string[], original: string[]) {
  // 如果长度不同则提前返回
  if (current.length !== original.length) {
    return true
  }
  // 仅在长度匹配时才排序
  const currentSorted = current.toSorted()
  const originalSorted = original.toSorted()
  for (let i = 0; i < currentSorted.length; i++) {
    if (currentSorted[i] !== originalSorted[i]) {
      return true
    }
  }
  return false
}

这种新方法效率更高,原因如下:

  • 当数组长度不同时,避免了排序和连接数组的开销
  • 避免了为连接后的字符串消耗内存(对于大数组尤其重要)
  • 避免了修改原始数组
  • 在发现差异时即可提前返回