网站后台密码在哪个文件,wordpress在线搭建,自助建站加盟,十大网络安全上市公司什么是 esbuild#xff1f;
esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具#xff0c;以其卓越的性能著称。相比传统的构建工具#xff08;如 Webpack#xff09;#xff0c;esbuild 在打包速度上有着显著的优势#xff0c;能够将打包速度提升 10 到 100 倍…什么是 esbuild
esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具以其卓越的性能著称。相比传统的构建工具如 Webpackesbuild 在打包速度上有着显著的优势能够将打包速度提升 10 到 100 倍。这对于那些经常受到 Webpack 缓慢打包速度困扰的开发人员来说无疑是一个巨大的福音。
为什么 esbuild 能这么快 Golang 开发 Go 语言在 CPU 密集型任务中表现出色而传统的 JavaScript 构建工具并不适合这类场景。 多核并行 Go 语言具有多线程运行能力可以充分利用多核 CPU 的性能将解析、编译和生成的工作并行化。 从零开始 esbuild 从一开始就注重性能优化不依赖第三方库使用一致的数据结构避免了不必要的数据转换开销。 内存的有效利用 在 JS 开发的传统打包工具当中一般会频繁地解析和传递抽象语法树( AST )数据比如 字符串 - TS - JS - 字符串然后字符串 - JS - 旧的JS - 字符串然后字符串 - JS - minified JS - 字符串这其中会涉及复杂的编译工具链比如 webpack - babel - terser每次接触到新的工具链都得重新解析 AST导致大量的内存占用。
esbuild 仅触及整个JavaScript AST 3次
进行词法分析解析作用域设置和声明符号的过程绑定符号最小化语法。比如将 JSX / TS转换为 JS。AST生成JSsource map生成。
当 AST 数据在CPU缓存中仍然处于活跃状态时会最大化AST数据的重用。
为什么 esbuild 还没有一统江山
尽管 esbuild 有许多优点但它也存在一些明显的不足 缺乏 AST 操作能力 无法对打包产物进行降级到 ES5 及以下不支持低版本浏览器。 Code Splitting 功能还在计划中 当前版本的 esbuild 还不支持代码分割。 没有 TypeScript 类型检测 不像 Webpack 集成了 TypeScript 支持esbuild 需要额外的配置才能支持 TypeScript。 默认不支持 Vue、Angular 等框架的代码文件格式 需要通过插件来实现对这些框架的支持增加了开发成本。
为什么要学习 esbuild
esbuild 之所以受到关注很大程度上是因为它在 Vite 中的应用。esbuild是组成Vite的两架马车之一。 Vite 是一个现代的前端构建工具其核心理念是“快速启动”和“按需编译”。esbuild 是 Vite 的重要组成部分之一主要负责以下几个方面 依赖预构建 作为 Bundle 工具预构建第三方依赖减少开发时的加载时间。 单文件编译 作为 TypeScript 和 JSX 编译工具支持现代 JavaScript 语法。 代码压缩 作为压缩工具优化最终的打包产物。
什么是 no-bundle
ESM是JavaScript提出的官方标准化模块系统不同于之前的CJSAMDCMD等等ESM提供了更原生以及更动态的模块加载方案最重要的就是它是浏览器原生支持的也就是说我们可以直接在浏览器中去执行import动态引入我们需要的模块而不是把所有模块打包在一起。
Vite 是一个提倡 no-bundle 的构建工具相比于传统的 Webpack能做到开发时的模块按需编译而不用先打包完再加载。
什么是依赖预构建
模块代码其实分为两部分一部分是源代码也就是业务代码另一部分是第三方依赖的代码即node_modules中的代码。所谓的no-bundle只是对于源代码而言对于第三方依赖而言我们基本不会去改变他Vite 还是选择 bundle(打包)这个部分就依赖于esbuild。
但是关键点是为什么在开发阶段我们要对第三方依赖进行预构建? 如果不进行预构建会怎么样
首先 Vite 是基于浏览器原生 ES 模块规范实现的 Dev Server不论是应用代码还是第三方依赖的代码理应符合 ESM 规范才能够正常运行。但是我们没有办法控制第三方的打包规范。还有相当多的第三方库仍然没有 ES 版本的产物。
此外ESM还有一个比较重要的问题——请求瀑布流问题。ESM的每个import都会触发一次新的文件请求因此在依赖层级深、涉及模块数量多的情况下会触发很多个网络请求巨大的请求量加上 Chrome 对同一个域名下只能同时支持 6个 HTTP 并发请求的限制导致页面加载十分缓慢与 Vite 主导性能优势的初衷背道而驰。
在进行依赖的预构建之后这种第三方库的代码被打包成了一个文件这样请求的数量会骤然减少页面加载也快了许多
总结
esbuild 以其卓越的性能和高效的构建流程成为现代前端开发的重要工具之一。虽然它还有一些不足但随着社区的发展和技术的进步这些问题正在逐步得到解决。Vite 作为 esbuild 的重要应用场景展示了 esbuild 在实际项目中的巨大潜力。