Evan You 创建 VoidZero 是做什么的?JS 工具链存在哪些问题?
大家好,我是王福鹏。
我是一名高级全栈工程师,也是 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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

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

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

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

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

探索前端中类似VSCode的面板拖拽调整功能的实现在前端开发中,如何实现类似于VSCode...

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。
