大家好,我是王福鹏。
我是一名高级全栈工程师,也是 17.5k 开源项目 PMP 的作者。现在我正在开发一个Notion风格的知识库
HuashuiAI 包括 AI 写作和协作,使用 React Nextjs 和 Supabase。
尤文 (Evan You) 和 VoidZero
两个月前,Vue 和 Vite 作者 Evan You 宣布成立 VoiceZero 公司,并获得数百万美元投资。
VoidZero将基于Vite开发Rolldown和Oxc两大工具,统一前端JS工具链。解决碎片、不兼容、效率低等问题。
VoidZero核心工具采用Rust语言开发,运行效率高、速度快。
JS工具链存在哪些问题
JS工具链主要包括语义分析、Transformer、linter、Transformer、minifier、bounder等流程
我们目前如何使用这些类型的工具?目前有哪些工具可用?他们之间是什么关系?它们真的效率低下且碎片化吗?下面我们就一一介绍一下。
注意他们的关系有些混乱,有的可以编译打包,有很多功能重叠,所以没必要强行分类比较。
JS运行时
所谓运行时,是指一种语言的运行时环境。如果没有运行时,那么语言只是一个无法解析和运行的字符串或字符串文件。
- Nodejs 是最常见的 JS 运行时,稳定、成熟,并且拥有非常丰富的生态系统。
- Deno 是近几年开发的 JS 运行时,专注于 TS 支持和网络安全。前两年获得了 2000 万美元的投资,最近发布了 Deno 2.0,目前正在快速发展
- Bun JS运行时,注重性能和一体化
// Nodejs Deno 或 Bun,都是写 JS 代码 const server = Bun.serve({ port: 3000, fetch(request) { return new Response("Welcome to Bun!"); }, }); console.log(`Listening on localhost:${server.port}`);
注意:JS运行时并不是JS工具链的一部分,它只是最基本的能力,但是了解这些工具和术语可以帮助将它们与JS工具链区分开来。你可能没有用过它,但你需要知道它的存在以及它的作用。
解析器/编译器
Web前端开发需要考虑与各种浏览器的兼容性,因为现代浏览器还无法直接运行 TS JSX 和最新的 ES 代码。
所以,我们需要将开发环境中的TS JSX ES等代码转换为浏览器可以执行的JS代码,通常是ES5。
Babel 是最早做这项工作的人之一,使用 JS 开发,拥有丰富的生态系统和插件,并且早已集成到 webpack rollup 等打包工具中。
但是Babel是用JS开发的,所以运行效率比较低。而且Babel在编译TS JSX时需要手动配置,相当麻烦。
SWC是一个用Rust语言开发的JS编译器,比Babel快20-70倍(在不同CPU上),并且原生支持TS和JSX语法,旨在取代Babel。 Vite内部使用SWC。
Rspack 使用 Rust 语言开发,但它不仅仅是一个 JS 编译器。是一款高效的综合打包工具。
与Rspack一样,ESBullid也是使用Go语言开发的,是一个综合性的打包工具,包含JS编译器,效率很高。
短绒检查和格式化程序
本节常用的是ESLint和Prettier,但它们的使用也存在一些混乱
- ESLint的配置标准有很多(比如Recommended、Airbnb、Google、StandardJS等),每个人使用的方式可能不一样。不同的项目也可能有不同的配置
- ESLint 和 Prettier 存在一些重复的功能,导致使用时难以选择,并且可能存在重复的配置
缩小器
UglifyJS是最早用来压缩JS代码的之一,现在它的下载量也非常大。
Terser基于UglifyJS源码开发,支持ES6新语法并优化Tree Shaking。
不过,SWC、esbulid等新工具现在也支持JS代码压缩,而且执行效率更高。毕竟 Rust 或者 Go 本身的执行效率就比 JS 高很多。
邦德勒
打包器是我们最常接触的,比如Webpack Vite、Parcel。后者可能不常用,但也是一个成熟的工具。
Vite使用SWC作为解释器,效率很高。开发环境使用esbulid打包,生产环境使用rollup打包。
同时,esbulid(Go语言开发,前面介绍过)和rollup也可以单独使用作为打包工具,很多第三方JS插件都是使用rollup进行打包的。
Turbopack 是 Vercel 使用 Rust 为 Next.js 项目开发的 JS 打包工具,也可以独立使用。
Rspack 是一个使用 Rust 开发的 JS 打包工具(附带 JS 编译器),可以替代 webpack,而且速度非常快。
SWC也在开发自己的打包工具swcpack——这么多,你觉得乱吗?是碎片化的吗?
为什么使用 Rust
你可能会好奇,为什么这么多工具需要用 Rust 语言开发?主要有两点
- Rust 是一种编译型语言,可以编译为本机代码并直接运行,性能与 C 相当
- Rust 内存管理更安全,而 C 内存管理更容易出现 bug
结局
回顾 JS 工具链的三个问题
- 碎片化:这个太明显了,各个领域都有很多重复的工具,尤其是巨石
- 不兼容性:旧工具与新语法(尤其是 TS JSX)兼容,并且需要过多配置
- 效率低:这个也是很明显的。在工具领域,JS 做得不如 Rust,被淘汰只是时间问题(别慌:这只是工具领域,应用领域还是 JS 和 TS)
所以,Vue 作者 Evan You 的眼睛很锐利,看得很准,能直接指出问题。而且他在这部分有很强的优势和抓地力,那就是Vite。 Vite现在拥有大量用户,可以作为一个很好的切入点。
当Vue等Web框架和Vite等单一工具遇到开发瓶颈时,Evan可以跳出这个圈子,发现更高层次的问题,并能够落地执行。这是值得我们学习的。
最后,这么多的投资,VoidZero需要一个投资回报。未来将如何商业化? Vite无法直接充值,那我们怎么赚钱呢?
关注我,我会在下一节详细分析。这将比技术和代码更有价值。
顺便说一句,我正在寻找一份国际工作机会,如果你有机会,欢迎通过我的 Github 个人资料联系我。
以上是Evan You 创建 VoidZero 是做什么的?JS 工具链存在哪些问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能