es-toolkit:比 lodash 快 3 倍,打包体积减少 97%,来自韩国 Toss 的开源工具库
es-toolkit:比 lodash 快 3 倍,打包体积减少 97%,来自韩国 Toss 的开源工具库
韩国金融科技公司 Toss 把内部使用的 JavaScript 工具函数库 es-toolkit 开源了出来,在 GitHub 上拿到了 1.1 万 Star。Toss 在韩国的地位相当于国内的支付宝,业务覆盖银行、保险、证券、支付等多个领域。这种体量的公司把内部基础设施开源,说明代码经过了高并发生产环境的验证。


es-toolkit 是一个 JavaScript 工具函数库,定位是 lodash 的替代品。它提供 debounce、chunk、sum、pick 等基础函数。目前已被 Storybook、Recharts、CKEditor、ink 等项目采用,测试覆盖率达到 100%。
性能:比 lodash 快 2 到 3 倍
lodash 发布于 2012 年,很多逻辑基于 ES5 时代的 JavaScript 引擎设计。为了兼容老旧浏览器和边界情况,代码中留下了大量类型判断、参数转换和容错回退逻辑。这些在现代引擎上都是不必要的开销。
es-toolkit 针对现代引擎重新实现,去掉了历史包袱。在性能基准测试中,es-toolkit 比 lodash 快 2 到 3 倍。对于 debounce 这种在滚动、输入等高频场景中频繁调用的函数,差距会更明显。
体积:打包后减少 97%
es-toolkit 天然支持 tree shaking。打包工具在构建时只提取实际使用的函数,未引用的代码不会进入最终产物。官方数据显示,相比其他工具库,打包体积可以减少 97%。
举个例子:一个项目从 lodash 引入了 debounce、chunk、pick、omit、cloneDeep 这 5 个函数,打包后可能增加约 70KB。换成 es-toolkit,同样 5 个函数只需约 2KB。对于移动端 H5 或小程序场景,这 68KB 的差距会直接体现在首屏加载时间上。
lodash 兼容层
es-toolkit 提供了 es-toolkit/compat 子包,接口和 lodash 保持一致。从 lodash 切换过来只需改一行 import 语句:
// 原来
import { chunk } from 'lodash';
// 改成
import { chunk } from 'es-toolkit/compat';
业务代码无需任何修改。如果不想走兼容层,用主入口 import { chunk } from 'es-toolkit' 体积更小。
TypeScript 和类型守卫
es-toolkit 用 TypeScript 编写,自带类型定义,不需要额外安装 @types/ 包。内置的类型守卫函数(isNotNil、isString 等)可以在条件分支后自动收窄类型:
const value: string | null | undefined = getSomeValue();
if (isNotNil(value)) {
// value 的类型自动收窄为 string
console.log(value.toUpperCase());
}
这减少了 as 类型断言的使用,让类型系统在运行时和编译期保持一致。
100% 测试覆盖率
es-toolkit 对每个函数都覆盖了常规输入、边界值和异常情况。测试覆盖率 100%。对于基础工具库来说,这个指标意味着每个函数的行为在版本升级时不会被意外破坏,依赖方可以放心跟进新版本。
AI 编程工具集成
es-toolkit 支持通过 Agent Skills 接入 AI 编程助手,包括 Claude Code、Cursor 和 Copilot:
npx skills add toss/es-toolkit
Claude Code 用户也可以在插件市场安装:
/plugin marketplace add toss/es-toolkit
/plugin install es-toolkit@es-toolkit-plugin
安装后,AI 助手生成代码时会优先推荐 es-toolkit 的函数。对于希望在新项目中统一使用 es-toolkit 的团队来说,这个功能能减少代码审查时替换 lodash 调用的工作量。
安装和使用
npm install es-toolkit
基本使用:
import { chunk, debounce } from 'es-toolkit';
const debouncedLog = debounce((message) => {
console.log(message);
}, 300);
debouncedLog('Hello, world!');
const array = [1, 2, 3, 4, 5, 6];
const chunkedArray = chunk(array, 2);
console.log(chunkedArray);
// [[1, 2], [3, 4], [5, 6]]
es-toolkit 以 MIT 协议开源,在 npm 和 JSR 上均可安装使用。从 lodash 迁移可以直接走兼容层,新项目建议用主入口获得最小的打包体积。
], [3, 4], [5, 6]]
es-toolkit 以 MIT 协议开源,在 npm 和 JSR 上均可安装使用。从 lodash 迁移可以直接走兼容层,新项目建议用主入口获得最小的打包体积。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)