写点什么

Lodash,你正在使用的 JavaScript 库

2015 年 3 月 31 日

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 年 3 月 31 日 07:109536
用户头像

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

关注

评论

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

基于环信sdk在uni-app中快速开发多平台社交Demo

DT极客

Serverless: 2020年函数计算的冷启动怎么样了

刘宇

Kafka零数据丢失的配置方案

奈学教育

kafka kafka配置 kafka数据

数据分析的利器-clickhouse概述

流沙

数据库 Clickhouse

游戏夜读 | 预测问题的硬核是?

game1night

练习英语口语的误区

七镜花园-董一凡

学习

看完这篇操作系统,和面试官扯皮就没问题了

cxuan

操作系统 计算机基础

MySQL索引知识介绍

Simon

MySQL 索引结构

提升编程效率:重构

Page

高效工作 敏捷开发 重构 高效

spring注入bean的几种策略模式

测试轩

Java Spring Boot 测试驱动开发实战营

Linux 容器化技术的前世今生(虚拟化、容器化、Docker)

Meandni

Docker 云计算 Linux 容器 虚拟机

个人技术成长与发展

颇风

后端 技术人

从ClickHouse的名字由来讲起

nauu

数据库 大数据 分布式 OLAP Clickhouse

【大咖说问大咖】关于开源的那些事 —— PingCAP CTO 黄东旭 Q&A 交流帖

InfoQ写作平台官方

开源 写作平台 大咖说 技术交流 活动专区

Intellij IDEA2020.x如何安装Lombok插件

龙眼果

开发者工具

ClickHouse为何如此之快?

nauu

数据库 大数据 OLAP Clickhouse

Spring Cloud Kubernetes之实战网关Gateway

Damon

Kubernetes 容器 Spring Cloud 微服务冶理

如何优雅的实现分布式锁

张坚

redis zookeeper 分布式锁

敏捷团队成员的工作量指标真的那么重要吗?

金生水起

敏捷开发 Scrum精髓 敏捷精髓 Agile

真的!只需 “六步” 实现图像特定物体识别!!!

攀鱼飞岩

Python OpenCV 计算机视觉 图像识别 物体检测

搜商:高效的使用搜索引擎

石云升

高效搜索 搜索技巧 搜商

工程师、程序员和产品经理

王泰

程序员 产品经理 IT 软件工程师 工程师思维

JVM源码分析之深入分析Object类finalize()方法的实现原理

猿灯塔

JVM

Android | Tangram动态页面之路(一)需求背景

哈利迪

android

为什么我喜欢的大V拉黑我?

lmymirror

经历 后真相时代 日常思考

KK日知录20200515

kimmking

如何认识更多的朋友扩展社交朋友圈的质量

吃素的左撇子

人生 人脉

严选合伙人(一)

Neco.W

创业 合伙人 初创公司

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (七)CORRECT边界条件

编程道与术

Java 编程 软件测试 TDD 单元测试

何时开始重构?

Page

敏捷开发 重构

太赞了,VSCode 上也能画流程图了!

GitHubDaily

visual-studio GitHub 程序员 vscode 开发者工具

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

Lodash,你正在使用的JavaScript库-InfoQ