使用Object.keys和lodash _.keys()之间的性能差异是什么

时间:2019-04-30 05:07:42

标签: javascript lodash

使用ES6 Object.keyslodash _.keys()有什么性能差异吗?

或者将一个与另一个相对使用有什么好处?

最近,我正在考虑使用哪种最佳实践,有人知道每个人的内幕吗?谢谢。

1 个答案:

答案 0 :(得分:4)

库方法_.keys用Java语言编写,而不是用本机代码编写-当本机代码和自定义函数都可以完成X时,本机代码几乎总是更快,因为它是内置在浏览器中并用较低的代码编写的级(如C ++):

const obj = [...new Array(50)];
const p0 = performance.now();
for (let i = 0; i < 1e5; i++) {
  _.keys(obj);
}
const p1 = performance.now();
console.log('lodash', p1 - p0);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

const obj = [...new Array(50)];
const p0 = performance.now();
for (let i = 0; i < 1e5; i++) {
  Object.keys(obj);
}
const p1 = performance.now();
console.log('Object.keys', p1 - p0);

也就是说,通常不必担心这样的优化-通常,如果您的脚本有瓶颈,很可能会出现在其他地方。避免过早优化。如果您当前的代码库使用_.keys并且您没有重复调用_.keys很多次,则可能不必担心-您可以考虑使用代码库的当前样式,无论哪种方式,现在,除非/直到遇到性能问题。

另一个区别是Object.keys是ES5方法。如果您必须支持非常古老的浏览器,那么在没有polyfill的情况下,它们可能无法使用Object.keys(并且polyfill的性能可能与Lodash实现类似)。