写点什么

Lodash,你正在使用的 JavaScript 库

  • 2015-03-31
  • 本文字数:1189 字

    阅读完需:约 4 分钟

JavaScript 工具库 lodash 发布了 3.5 版,成为了 npm 包仓库中依赖最多的库。它正在摆脱屌丝身份,成为开发者的不二之选。

lodash 一开始是 Underscore.js 库的一个 fork,因为和其他 (Underscore.js 的) 贡献者意见相左。 John-David Dalton 的最初目标,是提供更多“一致的跨浏览器行为……,并改善性能”。之后,该项目在现有成功的基础之上取得了更大的成果,并于一月份发布了 3.0 版本。

与其前任 Underscore 一样,lodash 的名字也是源于所有函数前面的那个字符。就像 jQuery 在全部函数前加全局的 $ 一样,lodash 使用全局的 _ 来提供对工具的快速访问。例如,要对数组的所有元素执行某个行为,我们可以:

_.each([1, 2], function(n) { console.log(n); });3.0 版包含了新增的 47 个新方法(如_.camelCase_.flattenDeep)在内的许多更改。更重要的是对链式方法进行延迟计算:

复制代码
var users = [
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'pebbles', 'age': 1 }
];
var youngest = _.chain(users)
.sortBy('age')
.map(function(chr) {
return chr.user + ' is ' + chr.age;
})
.first()
.value();
// → 'pebbles is 1'

在 InfoQ 的一次采访中,Dalton 表示在这些方法中使用延迟计算改进了 lodash 的性能:

延迟计算意味着在显示或隐式的 value() 调用之前不会执行链式方法。由于执行被延后了,因此 lodash 可以进行 shortcut fusion 这样的优化,通过合并链式 iteratee 大大降低迭代的次数。

Filip Zawada描述了这一改变对于性能的提升。

最初,lodash 只是 Underscore 的一个复制品,但 3.0 之后,不会再有针对于 Underscore 的构建。“尽管我们仍然会运行 Underscore/Backbone 的单元测试,但 lodash 3.0 将不再支持单独的 Underscore/Backbone 构建”,Dalton 说。

在过去的一年中,我们看到 Underscore 根据 lodash 的 API 进行了很多调整,因此为 Underscore 进行单独构建的需求减少了。如果开发者仍然需要兼容某些边缘情况,建议在使用 Underscore 的同时,用 lodash 3.0 版中的模块进行补充。

一些主要的 npm 包都依赖于 lodash,如 JavaScript 转译器 Babel 、博客平台 Ghost ,和项目脚手架工具 Yeoman 。其中 Ghost 是从 Underscore 迁移到了 lodash。在被 InfoQ 问及在 Ghost 中引入 lodash 时,Ghost 的创始人 John O’Nolan 说到,“这是一个非常明智的选择,它几乎完全是由我们开源开发社区推动的。

我们发现 lodash 包含更多的功能,更好的性能、恰到好处地使用了 semver,并且在 Node.js 社区(以及其他依赖)中越来越抢眼。

lodash 不但深受 node.js 开发者欢迎,还广泛应用于基于浏览器的项目中。Web 开发者可以使用实验构建工具来挑选项目中需要的方法,而不必下载整个库。对于 node.js 项目,在不需要整个包的时候,可以只 include 单个方法。

查看英文原文 Lodash, the JavaScript Library You’re Already Using

2015-03-31 07:1010387
用户头像

发布了 59 篇内容, 共 25.2 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

TiDB 7.1资源管控和Oceanbase 4.0多租户使用对比

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

跨AZ部署最佳实践之Kafka

焦振清

无处不在 | 亚马逊云科技的 Java 生态

亚马逊云科技 (Amazon Web Services)

Java 开源 jdk

时间戳与时区

ScratchLab

cdc任务同步错误但不会触发告警问题记录

TiDB 社区干货传送门

故障排查/诊断

强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战

汀丶人工智能

人工智能 深度学习 强化学习 Qlearning 6 月 优质更文活动

老大给了个新需求:如何将汉字转换成拼音字母?1行Python代码搞定!

程序员晚枫

Python 拼音 汉字

【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(基本概念篇)

码界西柚

领域驱动设计 DDD 领域驱动模型DDD 中台架构 领域驱动模型

Nautilus Chain:模块化Layer3的先行者

鳄鱼视界

分布式流处理组件-生产实战:Broker节点负载

谢先生F

kafka 负载均衡 broker

在高度为h的堆中,元素个数最多和最少分别是多少?

福大大架构师每日一题

ChatGPT

TiDB v7.1.0离线升级命令版

TiDB 社区干货传送门

实践案例 版本升级 7.x 实践

问答对话文本数据,构建智能问答对话系统的基础

数据堂

驾驶新时代:车载语音识别的革命性进展与应用

数据堂

符号接在 busybox 中的妙用

ScratchLab

2023-06-22:一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试 给你一个二维数组 classes ,其中 classes[i] = [passi, totali] 表

福大大架构师每日一题

算法 福大大架构师每日一题

基于CC2530设计智慧农业控制系统

DS小龙哥

6 月 优质更文活动

TTS语音合成技术及其应用

数据堂

头一次见单例模式讲的如此透彻

越长大越悲伤

设计模式 单例模式

横看Dubbo-微服务治理之无损上线

M

微服务 dubbo 无损

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

BlockChain先知

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

西柚子

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

鳄鱼视界

skywalking沉了一年的线程池插件bug被我解决了

夏奇

Java Agent Skywalking ClassLoader 字节码增强 开源贡献

强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战

汀丶人工智能

人工智能 深度学习 强化学习 Qlearning 6 月 优质更文活动

RWA 成下一轮加密大叙事,PoseiSwap 的价值正在凸显

股市老人

2023-06-23:redis中什么是缓存击穿?该如何解决?

福大大架构师每日一题

福大大架构师每日一题

Lodash,你正在使用的JavaScript库_JavaScript_David Iffland_InfoQ精选文章