(Why) Is lodash slow?((为什么)罗达什很慢吗?)
问题描述
this answer中描述并得到this基准支持的结果令我震惊,该基准将该解决方案(原生JavaScript)与the one I proposed (Lodash)进行比较。
我还比较了建议的解决方案:
const obj = {
name: undefined,
age: 15,
school: 'Some school'
}
const hasOnly = (obj,props) => {
var objProps = Object.keys(obj)
return objProps.length == props.length && props.every(p => objProps.includes(p))
}
console.log(hasOnly(obj,['name','age'])) //return false
console.log(hasOnly(obj,['name','age','city'])) //return false
console.log(hasOnly(obj,['name','age','school'])) //return true
在Lodash中,我真正简单地从每个本机函数切换到相应的函数,
hasOnly = (obj,props) => {
const objProps = _.keys(obj)
return _.size(objProps) == _.size(props) && _.every(_.includes(objProps), props);
}
and the result is still disappointly in favour of the native solution。
现在,上面的例子可能是个愚蠢的例子,但仍然.>;速度慢90%?那我用Lodash做什么?我的意思是,在不同的场景中,它可以提高可读性,特别是当函数必须部分应用和传递时,Lodash将您从大量x => x.
(经典示例arrayOfarrays.map(_.map(fOnTheElements))
而不是arrayOfarrays.map(arr => arr.map(fOnTheElements))
)中解救出来,但是如果性能如此之低,那么很难使可表现性足以选择Lodash而不是本机代码。
我刚接触JavaScript和Lodash(只是对函数式编程并不完全陌生),所以我甚至不知道链接答案中使用的基准测试工具的可靠性,但我不敢相信它会做出如此糟糕的工作来颠倒结果。
推荐答案
lodash只是javascript。没有什么魔术可以使它比用来编写它的本机代码更快。
简而言之,每个方法调用都有开销。所以如果我这么做const len = myArr.length
您做到了
const len = _.size(myArr);
我们假设_.size
的实现是
function size(arr){
return arr.length
}
(它做的还不止这些,但请和我一起呆在这里!)那么至少您有一个本机解决方案没有的额外方法调用。
实际上_.size
even more than just check the length
通过返回集合的类似数组值的长度或对象自己的可枚举字符串键控属性的数量来获取集合的大小。
因此,在额外的方法调用之上,您有用于检查";数量的可枚举字符串键控属性&的代码-这真的奇怪本机解决方案更快吗?
那么为什么要使用像lodash这样的库呢?因为他们的文档标题是:
Lodash通过省去处理数组、数字、对象、字符串等的麻烦,简化了JavaScript。
因此,为了可读性和易用性,您牺牲了一些速度。
这篇关于(为什么)罗达什很慢吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:(为什么)罗达什很慢吗?


- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01