12.5 小结

本章介绍了 Nashorn,这是在 JVM 之上实现的 JavaScript 引擎,在 Java 8 中引入。我们说明了如何使用 Nashorn 执行脚本,以及如何利用 Java 和 JVM 的全部功能,增强 JavaScript 脚本,甚至代替 bash 和 Perl 脚本。我们还介绍了 JavaScript 引擎 API,说明了 Java 与脚本语言之间是如何相互操作的。

我们介绍了 Nashorn 提供的 JavaScript 和 Java 之间的紧密集成,以及一些小小的语言句法扩展,让编程变得更简单一些。最后,我们简要说明了 Nashorn 实现这些功能的细节。下面我们快速展望一下未来,介绍一下 Avatar 项目,这个项目可能代表着 Java/JavaScript Web 应用的未来。

Avatar项目

最近几年,JavaScript 社区最成功的新产物是 Node.js。这是一个简单的服务器端 JavaScript 实现,由 Ryan Dahl 开发,现在则由 Joyent 公司管理。Node.js 提供的编程模型大量采用异步机制——围绕回调、非阻塞 I/O 和一个简单的单线程事件轮询模型设计。

虽然 Node.js 不适合开发复杂的企业应用(因为在大型代码基中回调模型有诸多限制),但比较适合开发原型、简单的“胶水”服务器,以及不是很复杂的单用途 HTTP 和 TCP 服务器应用。

Node 生态系统的繁荣得益于提倡重用代码,制成 Node 包。类似于 Maven 档案文件(和较早期的系统,例如 Perl CPAN),Node 包简化了代码的创建和分发,不过,JavaScript 缺少模块化和部署功能,这些相对不完善的机制限制了 Node 包的使用。

Node 的原始实现包含几个基本组建——一个执行 JavaScript 的引擎(谷歌为 Chrome 浏览器开发的 V8 引擎)、一个简单的抽象层和一个标准库(主要是 JavaScript 代码)。

2013 年 9 月,甲骨文公司宣布了 Avatar 项目。甲骨文希望通过这个项目建立 Web 应用未来的架构,并把 JavaScript(和 Node)带入已经成熟的 Java Web 应用生态系统。

作为 Avatar 项目的一部分,甲骨文开源了他们对 Node API 的实现。这个实现运行在 Nashorn 和 JVM 之上,叫作 Avatar.js,准确实现了大多数 Node API。目前(截至 2014 年 4 月),这个实现能运行大量 Node 模块——基本上都是不依赖本地代码的模块。

当然,未来是不可预知的,不过 Avatar 项目指出了一种可能的发展方向:新一代 Web 应用以 JVM 为基础,结合 JavaScript 和 Java,尽量发挥二者各自的优势。