文章摘要
过去十年间,JavaScript运行时和引擎的多样化发展迅速,使其能够适应云端、边缘计算、智能电视、移动设备甚至微控制器等多种场景。这种多样性源于不同场景对运行时的特定需求,导致没有一个运行时或引擎能够满足所有用途。从2002年Akamai首次引入边缘计算,到2009年Node.js的出现,再到2014年AWS Lambda的应用,JavaScript逐步扩展至服务器端和边缘计算领域。
文章总结
过去十年中JavaScript运行时的多样化发展
在过去的十年中,JavaScript运行时(以及相应的引擎)如雨后春笋般涌现,使得我们能够在各种场景中运行JavaScript,并根据任务需求进行精确优化。通过这些运行时,JavaScript已经扩展到了云端、边缘计算、智能电视、移动设备,甚至微控制器等领域。
边缘计算的兴起
边缘计算的首个消费者解决方案由Akamai在2002年推出,最初使用的是Java和.NET。然而,JavaScript直到2009年Node.js的出现才成为服务器端语言,而直到2014年AWS Lambda的推出,Node.js才被用于无服务器环境。2016年,AWS推出了Lambda@Edge,标志着JavaScript正式进入边缘计算领域。随后,Cloudflare Workers在2017年发布,成为首个直接产品化的JavaScript运行时,迅速取得了巨大成功,并引发了其他公司的竞争,如Deno和Bun等。
微控制器上的JavaScript
在资源有限的微控制器上运行JavaScript是一个挑战。为了适应这些设备的低内存和低功耗需求,开发者们开发了一系列轻量级引擎,如Duktape、Espruino、JerryScript等。这些引擎能够在极低的内存(甚至不到100字节)下运行,尽管在性能上有所妥协。基于这些引擎,还诞生了IoT.js、Microlattice.js等物联网运行时。
多语言引擎的兴起
虽然大多数JavaScript引擎基于自定义的虚拟机(VM),但也有一些引擎基于现有的VM,实现了与其他语言的无缝互操作。例如,Rhino引擎基于JVM,支持Java和JavaScript的双向互操作。随后,Nashorn和Graal.js相继出现,进一步推动了JavaScript在Java生态中的应用。此外,还有针对.NET、Python、Ruby、Go、Rust等语言的JavaScript引擎,甚至有些引擎是用JavaScript本身实现的。
原生应用中的JavaScript
JavaScript的Web起源使其非常适合构建GUI应用,因此它很快被用于原生应用的开发,尤其是在跨平台框架中。基于Web视图的应用框架如Cordova和Electron在移动和桌面平台上取得了巨大成功。React Native则通过渲染原生平台视图,提供了更接近原生应用的体验,并逐渐成为移动应用开发的主流框架。在智能电视领域,JavaScript也通过Cordova和React Native等框架得到了广泛应用。
Node.js在原生应用中的角色
虽然Node.js主要用于服务器端开发,但它也被移植到移动设备上,尽管在原生应用开发中并未取得显著成功。Node.js在桌面应用开发中也有一定的应用,但始终未能与Electron等框架竞争。
总结
JavaScript在过去十年中随着个人设备的普及而迅速发展,成为了几乎所有设备类别中的主流语言。尽管开发者们试图摆脱浏览器的限制,充分利用原生API,但大多数框架仍然保留了Web平台的特性。无论是通过Web视图还是通过React Native等框架,JavaScript在GUI编程中展现了强大的生命力。
为什么没有“最佳”运行时?
由于JavaScript运行的环境多种多样,优化目标也各不相同。启动性能、运行时性能、包大小、API支持和原生访问的便捷性等因素相互冲突,因此没有一个运行时能够适用于所有场景。尽管V8和JavaScriptCore在浏览器之外仍然保持领先地位,但Hermes、workerd和QuickJS等新引擎在某些领域已经开始挑战它们的地位。
结语
JavaScript的生态系统在过去十年中蓬勃发展,开发者们不断探索新的运行环境和应用场景。无论是边缘计算、微控制器,还是原生应用,JavaScript都展现了其强大的适应性和灵活性。尽管竞争激烈,但这种多样性推动了技术的进步,为开发者提供了更多的选择。
评论总结
评论内容主要围绕一篇关于JavaScript运行时和引擎的文章展开,观点多样,涉及技术细节、遗漏内容以及对未来的展望。以下是总结:
文章质量与贡献:
- 多位评论者高度评价文章的质量和深度,认为其内容丰富且参考详尽。
- "This article deserves to be the basis of a Wikipedia page." (ottod)
- "4,000+ words, 200+ links, and lots of research covering countless JavaScript runtimes and engines." (LinguaBrowse)
- 多位评论者高度评价文章的质量和深度,认为其内容丰富且参考详尽。
技术细节与补充:
- 评论者对文章中提到的技术细节进行了补充和修正,特别是关于LLRT、QuickJS、Cloudflare Workers等运行时和引擎的讨论。
- "LLRT is mostly community contributed and one guy from AWS." (Sytten)
- "Cloudflare's workerd uses the V8 engine." (laurencerowe)
- 评论者对文章中提到的技术细节进行了补充和修正,特别是关于LLRT、QuickJS、Cloudflare Workers等运行时和引擎的讨论。
遗漏内容:
- 多位评论者指出文章遗漏了一些重要的运行时和引擎,如Bun、Ejacs、JScript、GraalJS、Nombas ScriptEase等。
- "What!? No mention of bun?" (reactordev)
- "Missing^1: JScript from MicroSoft." (ksherlock)
- 多位评论者指出文章遗漏了一些重要的运行时和引擎,如Bun、Ejacs、JScript、GraalJS、Nombas ScriptEase等。
未来展望与质疑:
- 评论者对JavaScript运行时的未来发展提出了质疑,特别是关于多个运行时生态系统的共存和互操作性问题。
- "Deno and Bun seem to be two highly competitive runtimes, but the fairly tale of multiple winners seems unlikely." (dfee)
- 评论者对JavaScript运行时的未来发展提出了质疑,特别是关于多个运行时生态系统的共存和互操作性问题。
其他技术问题:
- 评论者还提出了一些技术问题,如异步上下文跟踪、链接维护等。
- "How do these new runtimes handle async context tracking?" (cat-whisperer)
- "Do you have a solution to maintain links green?" (NeutralForest)
- 评论者还提出了一些技术问题,如异步上下文跟踪、链接维护等。
总结:评论者对文章的技术深度和广度表示认可,但也指出了遗漏的内容和技术细节上的不准确之处。同时,评论者对JavaScript运行时的未来发展提出了质疑,认为多个运行时生态系统的共存可能面临挑战。