近日,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 容器或者就是一种“先驱”践行者。你是否也这么感觉呢?欢送在评论区留言互动。