编程语言、ES 标准、JS 引擎和运行时
小麦2024年08月16日1795 字
本期视频末尾有免费福利,请看到最后,不要错过哦。
我们知道,JavaScript 是前端使用频率最高的编程语言,
用它配合 HTML 和 CSS 足以构建出一个完整的 Web 应用,
但是在现代前端,除了 JS 还会涉及到许多别的编程语言,它们各有所长。
这一期我们会介绍 ECMAScript 规范、TypeScript、基于 Rust 的前端新基建、WebAssembly、领域特定语言(DSL)以及 JS 语言的运行时。
我们经常提到 ES6,
它的全称是 ECMAScript 6 或是 ECMAScript 2015。
它是一套文档,规范了脚本语言的设计,包括语法、数据类型、内置对象等等。
而 JS 则是遵循这套规范的编程语言之一。
ES 规范确保了无论在何处使用 JS,它的写法和行为都应该是一致的。
ES 规范每年引入一些新特性,从 ES2015 的 let/const、箭头函数,
到 ES2024 的 Object.groupBy,已经加入了非常多实用的功能,你大概率已经在项目中用到了它们。
借助于现代前端工具链的转义和 polyfills 的等效实现,你可以在不支持这些新特性的环境中使用它们。
关于现代前端工具链的内容我们会在之后的视频中介绍。
TypeScript 是 JavaScript 的超集,
正如其名,它的核心特性是类型系统。
类型系统有许多优势,即便你没有在写 TypeScript,你依然在享受类型系统带来的便利,比如 VSCode 提供的类型提示就是基于 TypeScript 类型的。
TypeScript 最终依然会编译到 JavaScript,
但在大型前端应用中,TypeScript 的类型检查可以使许多常见错误暴露于编译阶段,从而减少运行时错误,极大地提升了代码的健壮性和可维护性。因此,使用 TypeScript 开发高质量前端应用几乎是必须的。
近些年 Rust 在前端发展十分迅猛,它正在占领前端工具链生态,
比较典型的案例有:对标 Babel 的 SWC、对标 Webpack 的 Rspack、Farm、Next.js 的 Turbopack 等都是基于 Rust 语言编写的。
这里最根本的原因是前端项目的体量越来越庞大,构建性能已经成为瓶颈,传统的打包优化方案已经无法进一步提升性能,因此需要借助性能更强的编程语言。
它就是 Rust,兼顾性能、安全和稳定的现代编程语言。
与其说 Rust 占领了前端基建,不如说它是好刀用到了刀刃上。
WebAssembly 简称 Wasm,最早用于在浏览器中处理计算密集型任务。
而到了现代,它已然成为一套完整的应用运行生态。
它通常不由人直接编写,而是系统语言 C/C++/Go 和 Rust 的编译目标之一。
Wasm Runtime 的出现使其能在非浏览器环境中运行,比如我们可以直接在 Node.js 中运行 Wasm。
WebAssembly System Interface(WASI)API 又为 Wasm 提供了访问系统功能的能力,比如文件系统和网络等。
Wasm 在 Web 开发中有着广泛的应用,除了满足重度计算需求外,它还应用于跨平台开发、安全沙箱、容器和虚拟化技术。
你也许使用过在浏览器中打开的云 IDE,它就是 Wasm 落地应用的集大成者。
还有一类编程语言称之为领域特定语言(DSL),它通常是在某个现有语言基础上,增加一定约束和扩展,应用于某个特定场景。
比如我们在微信小程序中编写的 WXML、在 React 中编写的 JSX、在 Vue 中编写的 Template 等等,它们都统称领域特定语言。
领域特定语言并不是通用型语言,但相比通用型语言,它的语法更简单、开发效率更高、专业对口业务、可维护性强。
你写的代码要运行,自然离不开 JS 引擎和 JS 运行时。
JS 引擎负责代码解析、编译、执行和优化,
而 JS 运行时不仅自带一个 JS 引擎,还提供了一组环境相关的 API。
比如服务端的 Node.js 是基于 V8 的运行时,而 Bun 则是基于 JavaScriptCore 的运行时。它们提供了不同的 API,比如同样是打开文件,Node.js 是 fs.open(),而 Bun 则是 Bun.file()。
再比如 Chrome 浏览器提供了基于 V8 引擎的运行时,而 Safari 浏览器提供了基于 JavaScriptCore 引擎的运行时。它们都提供了 Web API,但实现上有着细微差异,这也是客户端代码容易产生兼容性问题的根本原因,关于这个问题,我们会在后续的视频中展开。
又比如 Next.js 提供的边缘运行时(Edge Runtime)不支持 Node.js API,而 Cloudflare 云服务的边缘环境则支持有限的 Node.js API。
因此,前端开发者需要分清楚,自己的代码会在什么样的运行时中运行。
我们已经知道 Node.js 是最常用的 JS 运行时,但在企业级的大型 Node.js 应用中,仅仅用它还是不够的。
大型 Node.js 应用还会考虑性能监控、安全提醒、故障排除、性能优化等问题。
比如阿里云前端基建团队的 Node.js 性能平台(前身叫 alinode),就在 Node.js 的基础上增加了这些功能,提供了一整套解决方案。
更多关于这方面的内容,会在后续视频中展开。
本期内容我们简要介绍了现代前端会用到的各种编程语言、运行时,以及它们的应用。
如果对你有用,记得一键三连。
有很多朋友后台私信问我要视频中提到的资料,虽然每期视频末尾都会提供相关链接,但的确不便于保存和查看。
因此我抽空做了一个网站,
这个网站里整合了往期视频以及对应的参考资料,你也可以在更新计划中看到未来要制作的内容。全部免费,不用注册,自由获取,欢迎收藏和转发给你的朋友。
另外我也会在这里放一些更有意思的东西,敬请期待。
我是小麦,我们下期再见。