网站首页 > 技术文章 正文
大家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
什么是 Size Limit
Size Limit 是 JavaScript 的性能预算工具,它检查 CI 上的每次提交,计算最终用户 JS 的实际成本,并在成本超过限制时抛出错误。
Size Limit 具有以下特征:
- ES 模块和 tree-shaking 支持。
- 向 Travis CI、Circle CI、GitHub Actions 或其他 CI 系统添加大小限制,以了解拉取请求是否会增加大量依赖项。
- 模块化以适应不同的用例,比如:使用自己的打包器的大型 JS 应用程序或包含许多文件的小型 npm 库。
- 可以计算浏览器下载并执行 JS 所需的时间,与以字节为单位的大小相比,时间是一个更准确、更容易理解的度量标准。
- 计算包括 JS 中使用的所有依赖项和 polyfill。
通过 GitHub Action“大小限制”,将在拉取请求讨论中将包大小更改作为 comment 发布。
通过 --why,Size Limit 可以告诉开发者为什么当前库具有这种大小,并显示所有内部依赖项的实际成本,同时可以使用 Statscope 进行此分析。
目前 Size Limit 在 Github 上通过 MIT 协议开源,有超过 6k 的 star、1.8k 的 fork、依赖项目数 15.1k、代码贡献者 100+,妥妥的前端优质开源项目。
Size Limit 如何工作
Size Limit 的大致工作流如下:
- Size Limit 包含一个 CLI 工具、3 个插件(file, webpack, time)和 3 个针对流行用例的插件预设(app, big-lib, small-lib)。 CLI 工具在 package.json 中查找插件并加载配置。
- 如果使用 webpack 插件,Size Limit 会将 JS 文件打包到一个文件中, 跟踪依赖项和 webpack polyfill 非常重要。 它对于具有许多小文件且没有打包器的小型库也很有用。
- webpack 插件创建一个空的 webpack 项目,添加当前库并查找包大小差异。
- time 插件将当前机器性能与低价 Android 设备进行比较,计算 CPU 节流率。
- 然后,time 插件运行无头 Chrome(或桌面 Chrome,如果可用)来跟踪浏览器编译和执行 JS 所需的时间。
目前 MobX、Material-UI、Autoprefixer、PostCSS、Logux 等主流项目都在使用 Size Limit,是一个值得尝试的前端开源项目。
如何使用size-limit
size-limit 适合拥有自己的打包器并将 JS 打包直接发送到客户端(无需将其发布到 npm)的应用程序。 想象一个面向用户的应用程序或网站,例如:电子邮件客户端、CRM、带有交互元素的登陆页面或博客,使用 React/Vue/Svelte lib 或 vanilla JS。
首先安装 preset:
npm install --save-dev size-limit @size-limit/file
将 size-limit 部分和 size 脚本添加到 package.json 中:
+ "size-limit": [
+ {
+ "path": "dist/app-*.js"
+ }
+ ],
"scripts": {
"build": "webpack ./webpack.config.js",
+ "size": "npm run build && size-limit",
"test": "jest && eslint ."
}
可以通过以下方式获取当前项目的大小:
$ npm run size
Package size: 30.08 kB with all dependencies, minified and gzipped
接着继续设置限制,将当前总大小添加 25% 并将其用作 package.json 中的限制。
"size-limit": [
{
+ "limit": "35 kB",
"path": "dist/app-*.js"
}
],
将 size 脚本添加到测试套件中:
"scripts": {
"build": "webpack ./webpack.config.js",
"size": "npm run build && size-limit",
- "test": "jest && eslint ."
+ "test": "jest && eslint . && npm run size"
}
对于 JS 应用及时间限制、大的三方库、小的库的用法可以参考文末资料。当然,如果需要在 JS 中使用,可以参考下面的示例:
const sizeLimit = require("size-limit");
const filePlugin = require("@size-limit/file");
const webpackPlugin = require("@size-limit/webpack");
sizeLimit([filePlugin, webpackPlugin], [filePath]).then((result) => {
result; //=> { size: 12480 }
});
本文总结
本文主要和大家介绍 Size Limit,即一款JavaScript 的性能预算工具,它检查 CI 上的每次提交,计算最终用户 JS 的实际成本,并在成本超过限制时抛出错误。相信通过本文的阅读,大家对 Size Limit 会有一个初步的了解。
因为篇幅有限,文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏!
参考资料
https://github.com/ai/size-limit/tree/eff503cd9c794aa2e99207d0e33f793bce3c8062
https://github.com/mbalabash/estimo/issues/5
https://docs.google.com/presentation/d/1DutTpZ8p8K6JytEvNK1bJuvEIU3uMdhswwuZawdpuH0/edit#slide=id.g56184bbff6_3_42
猜你喜欢
- 2024-12-13 Vue3入门第一步,Vite创建项目
- 2024-12-13 Tailwind 组件库当首推 Tailwind Elements
- 2024-12-13 一篇文章说清 webpack、vite、vue-cli、create-vue 的区别
- 2024-12-13 TanStack Table v8:顶级 Table 和 Datagrid 无头 UI 库!
- 2024-12-13 相比React、vue资源消耗更小,使用更简单的新一代前端框架Svelte
- 2024-12-13 我们为何选择弃用 css-in-js ?
- 2024-12-13 SVG.js:比 Snap.svg 还快 5x 的零依赖开源库!
- 2024-12-13 2014年最优秀JavaScript编辑器大盘点
- 2024-12-13 出手王炸! NueCSS 框架要取代 Tailwind、CSS-in-JS?
- 2024-12-13 p5.js 使用npm安装p5.js后如何使用?
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)