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

Are*_*Lin 1 javascript lodash

使用 ES6Object.keyslodash _.keys()?

或者用一个来对抗另一个有什么好处?

最近我在考虑使用哪个是最佳实践,有谁知道每个人的引擎盖下是什么?谢谢。

Cer*_*nce 7

库方法_.keys是用 Javascript 编写的,而不是本机代码——当本机代码和自定义函数都可以完成 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);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

也就是说,担心此类优化通常并不重要 - 通常,如果您的脚本有瓶颈,它很可能在其他地方。避免过早优化。如果您当前的代码库使用_.keys并且您不重复调用_.keys大量次数,则可能无需担心 - 您可能会考虑暂时使用代码库的当前风格,无论哪种风格,除非/直到您遇到性能问题.

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