为什么有人更喜欢Lodash或Undercore.js实用程序库而不是另一个?
Lodash似乎是下划线的替代品,后者已经存在了更长的时间。
我认为两者都很出色,但我对它们的工作原理了解不足,无法进行有意义的比较,我想了解更多的差异。
为什么有人更喜欢Lodash或Undercore.js实用程序库而不是另一个?
Lodash似乎是下划线的替代品,后者已经存在了更长的时间。
我认为两者都很出色,但我对它们的工作原理了解不足,无法进行有意义的比较,我想了解更多的差异。
当前回答
除了约翰的回答,阅读Lodash(我之前一直认为Lodash是Undercore.js的“我也是”),查看性能测试、阅读源代码和博客文章之外,还有以下几点使Lodash远优于Undercore.jss:
这不是关于速度,而是关于速度的一致性(?)
如果您查看Undercore.js的源代码,您将在前几行中看到Undercore.jss依赖于许多函数的本地实现。尽管在理想的情况下,这会是一种更好的方法,但如果您查看这些幻灯片中提供的一些性能链接,就不难得出结论,即这些“本地实现”的质量因浏览器而异。Firefox在某些功能上非常快,在某些Chrome中占据主导地位。(我想在某些情况下,Internet Explorer也会占据主导地位)。我认为,最好选择性能在浏览器之间更一致的代码。
一定要早一点阅读博客文章,不要为了它而相信它,而是通过运行基准来自己判断。我现在很震惊,看到Lodash在Chrome中的Array.every等简单的原生函数中比Undercore.js快100-150%!
Lodash中的临时演员也很有用。至于Xanax的一条备受好评的评论,建议对Undercore.js的代码做出贡献:拥有良好的竞争总是更好的,这不仅能保持创新,还能让你保持自己(或你的库)的良好状态。
这里列出了Lodash之间的差异,它的Undercore.js构建是Undercore.jss项目的替代品。
其他回答
他们非常相似,Lodash正在接手。。。
它们都是一个实用程序库,在JavaScript中占据了实用程序的世界。。。
看来Lodash现在更新得更频繁了,所以在最新的项目中使用得更多了。。。
此外,洛达什似乎比几位KBs更轻。。。
两者都有很好的API和文档,但我认为Lodash更好。。。
下面是获取数组第一个值的每个文档项的屏幕截图。。。
Undercore.js:
Lodash公司:
由于事情可能会不时更新,只需查看他们的网站。。。
洛达什牌手表
下划线.js
我同意这里所说的大部分内容,但我只想指出一个支持Undercore.js的论点:库的大小。
特别是如果您正在开发一个主要用于移动设备的应用程序或网站,那么生成的捆绑包的大小以及对启动或下载时间的影响可能会起到重要作用。
为了进行比较,这些大小是我在运行Ionic服务后在源地图浏览器中注意到的大小:
Lodash: 523 kB
Underscore.js: 51.6 kB
可以使用BundlePhobia检查Lodash和Undercore.js的当前大小。
Lodash获得了_.mapValues(),它与Undercore.js的_.mapObject()相同。
我只是发现了一个对我来说很重要的区别。Lodash的_.extend()的非Underscore.js兼容版本不复制类级别定义的财产或方法。
我在CoffeeScript中创建了一个Jasmine测试,演示了这一点:
https://gist.github.com/softcraft-development/1c3964402b099893bd61
幸运的是,lodash.underscore.js保留了Undercore.js复制所有内容的行为,这对我来说是理想的行为。
Lodash的灵感来自Underscore.js,但现在它是一个更好的解决方案。你可以定制你的版本,拥有更高的性能,支持AMD,并拥有更多的功能。检查jsperf上的Lodash与Undercore.js基准测试。。。这篇关于Lodash的精彩文章:
处理集合时,最有用的功能之一是速记语法:(尽管Undercore现在也支持此语法)
var characters = [
{ 'name': 'barney', 'age': 36, 'blocked': false },
{ 'name': 'fred', 'age': 40, 'blocked': true }
];
// Using "_.filter" callback shorthand
_.filter(characters, { 'age': 36 });
// Using Underscore.js
_.filter(characters, character => character.age === 36);
// → [{ 'name': 'barney', 'age': 36, 'blocked': false }]
(摘自Lodash文档)