javascript - 为什么一个函数在满数组时比在空数组时工作得更快

标签 javascript arrays performance v8

我有两个函数实现,它们获取数组的最后一个元素。

function first(array) {
  var length = array ? array.length : 0;
  return length ? array[length - 1] : undefined;
}

function second(array) {
  return array ? array[array.length - 1] : undefined;
}

第二个函数处理完整数组的速度比第一个快,但处理空数组的速度慢。为什么以及如何修复它?

完整数组的基准:http://jsperf.com/lodash-f-last/

空数组基准测试: http://jsperf.com/lodash-f-last/2

最佳答案

如果您希望您的代码运行得更快,您永远不应该越界读取:V8 去优化执行该操作的代码。

在您的 second 函数中,您正是这样做的 - 您读取了边界。而是在阅读之前进行边界检查:

function xlast(array) {
  return (array && array.length > 0) ? array[array.length - 1] 
                                     : undefined;
}

关于javascript - 为什么一个函数在满数组时比在空数组时工作得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29630600/

相关文章:

javascript - 将可多次调用的Javascript回调转换为promise

java - 如何找到字符串中最长的偶数单词

c++ - 如何防止删除成员函数返回的指针?

javascript - Chrome/Safari (webkit) 中的 Facebook Javascript SDK 登录问题 - 不安全的 Javascript 尝试

javascript - defer().promise 和 Promise 的区别

javascript - 手机innerWidth,innerHeight vs Resolution

不影响其他操作的MySql查询

c - 如何按照规则对数组进行合并和排序

c++ - C++ 中的多个 return 语句和性能

performance - 分母已知时更快的整数除法?