写点什么

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:1010590
用户头像

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

关注

评论

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

Java 程序经验小结:反射机制勿滥用

后台技术汇

28天写作

拆解 抽奖助手 的利益相关者

小匚

产品经理 产品经理训练营 无码科技

面试加分项!Android项目开发如何设计整体架构?学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

阿里发布2021年Redis“神级”手册:基础+原理+应用+集群+拓展+源码,六管齐下

Java架构追梦

Java redis 阿里巴巴 源码 架构

「Android渲染」图像是怎样显示到屏幕上的?

李小四

Android渲染 AndroidUI RenderingPipeline

anyRTC在音频领域的探索

anyRTC开发者

ios android 音视频 WebRTC 在线教育

70 张图带你彻底掌握红黑树

Java 数据结构 红黑树

产品训练营-第二周-作业

邹小胖

产品经理训练营

实习流水帐(一)

YUKI0506

Mybatis系列全解(一):手写一套持久层框架

潘大壮

Java 后端 mybatis mybatis源码

Mybatis系列全解(二):Mybatis简介与环境搭建

潘大壮

Java 后端 mybatis mybatis源码

Mybatis系列全解(三):Mybatis简单CRUD使用介绍

潘大壮

Java 后端 mybatis mybatis源码

Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

潘大壮

Java 后端 mybatis mybatis源码

产品训练营 - 对二次作业

Wangyunnfei

抽奖小助手——利益相关者

墨狂之逸才

阿里开始“拆”中台?!中台建设何去何从?

博文视点Broadview

第二章作业

白知之明

作业:挑一个你喜欢的产品平台,列出产品的利益相关方。

嫉妒的耗子

Springboot使用jasypt需要注意的一个小地方

Sky彬

springboot jasypt

产品经理训练营 - 第二周作业

泡面加煎蛋

CNCF CTO解读:2021云原生最新趋势

华为云原生团队

开源 Kubernetes 开发者 云原生 边缘技术

Spring 是如何解决循环依赖的?

程序员小航

Java spring 源码 循环依赖

一看就懂的网络传输介质介绍

Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解

潘大壮

Java 后端 mybatis mybatis源码

产品经理第二周作业

朱琴

MapReduce练习案例1-统计求和

小马哥

大数据 mapreduce 七日更

产品经理的大局观——

小匚

产品经理 产品经理训练营

面试学习!我们究竟还要学习哪些Android知识?讲的明明白白!

欢喜学安卓

android 程序员 面试 移动开发

融资融券系统搭建

v16629866266

面试官:你说说ReentrantLock和Synchronized区别

叫练

AQS 多线程 ReentrantLock lock 独占锁

产品经理训练营 - 第二章作业

Ryun

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