近日,Node.js 创始人 Ryan Dahl 在社区以“JavaScript Containers”为题发文议论了本人对 Javascript 容器的认识 —— Javascript 是通用脚本语言的“将来”,而 Javascript 容器则是简化服务器形象的“先驱”践行者。
家喻户晓,大多数服务器程序都运行的是 Linux 零碎,它们由一个文件系统、一些可执行文件、一些共享库组成,它们可能与 systemd 或 nsswitch 等系统软件接口。
但因为服务器软件通常依赖于许多系统资源和配置,因而在过来部署它始终是一项挑战。而 Linux 容器的呈现,就很好的解决了这个问题。特地是 Docker 进一步让 Linux 容器的应用失去遍及后,操作系统级的虚拟化为散发服务器软件提供了极好的机制,每个容器映像都是一个无依赖性的随时能够运行的软件包。
Ryan Dahl 示意,只管是在更高的形象级别上,但 browser JavaScript 中也仍旧能找到相似的关闭环境。直到 2018 年,Cloudflare 的 Zack Bloom 推出了 Workers 服务,这才“促使咱们思考 JavaScript 自身是否能提供一种新型的自力更生的服务器容器”——“咱们越能打消不必要的形象,就越能靠近‘The Network Is the Computer’的概念。
JavaScript 是通用脚本语言的“将来”
Ryan Dahl 认为,技术很难预测,但 World Wide Web(万维网、广域网)必定会在 10 年后呈现。随着越来越多的人类基础设施通过网络应用连贯在一起,10 年后 HTTP、HTML、CSS、JavaScript 这些形成网络的规范必定也会呈现。因而,“我置信 JavaScript 将会持续失去开发和改良”。
咱们晓得,网络是人类信息的根本媒介,脚本语言则像是驱动网络倒退的“基石”,这其中,JavaScript 不同于其余编程语言,因为它与这个基础设施严密相连。
脚本语言对于解决许多服务器端问题很有意义,它容许更快、更便宜地编写业务逻辑,但大多数正在编写的代码不受计算的限度,而是受生产力的限度 —— 编写速度和开发人员的金钱老本。
脚本语言(Python、Ruby、Lua、Shell、Perl、Smalltalk、JavaScript)十分类似,在语法和 API 方面存在差别,但简直没有其余能够与之比照的中央。这一点,置信每一位在 Rust 或 C 中工作过的人都能了解脚本语言的感触。
Ryan Dahl 总结称,脚本语言很有用,但它们简直都是一样的,其中“JavaScript 的应用要宽泛得多,而且是将来的证实。因而,将 JavaScript 视为通用脚本语言是有情理的”。
服务器软件高级别容器:JavaScript 沙箱
Javascript 中的沙箱并非传统意义上的沙箱,它是一种语法上的 hack 写法,指 Javascript 中解决模块依赖关系的闭包。
JavaScript 沙箱自身这个“容器”并非为了解决 Linux 容器所针对的问题,它的呈现是其简单化的后果 —— 最小化了 web 服务业务逻辑的样板文件,它与浏览器共享概念,并缩小程序员须要晓得的概念(如在编写 web 服务时,很可能任何 systemd 配置都只是不必要的样板)。
提起 JavaScript browser API,置信每个网络开发者都晓得,因为 JavaScript 容器形象是在雷同的 browser API 上构建的,所以开发者须要的教训总量缩小了,这恰好是 Javascript 的通用性升高了其复杂性。
在这个新服务器形象层中,JavaScript 取代了 Shell,且比 Bash/Zsh 更适宜编写脚本。JavaScript 沙箱能够调用 Wasm,而非像 Shell 那样调用 Linux 可执行文件。
综述
不可否认,JavaScript 是通用的脚本语言,也正是因为 JavaScript 的普遍性,一种新的相似容器的形象正在呈现 —— JavaScript 容器,它简化了服务器。
JavaScript 容器的呈现并非意味着 Linux 容器正在“沦亡”,这种抽象层次总是有用的。特地是对于编写的许多“业务逻辑”的开发者来说,当你建设一个网站的时候,或者大多数“web 服务”能够通过应用 JavaScript 容器而不是 Linux 容器来简化。
目前,为了试图从根本上简化服务器形象,为了进一步摸索这些想法,JavaScript 容器或者就是一种“先驱”践行者。你是否也这么感觉呢?欢送在评论区留言互动。