Node.js 创始人:Javascript 容器是简化服务器抽象的“先驱”践行者

简介: Node.js 创始人:Javascript 容器是简化服务器抽象的“先驱”践行者

近日,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 将会继续得到开发和改进”。

image.png

我们知道,网络是人类信息的基本媒介,脚本语言则像是驱动网络发展的“基石”,这其中,JavaScript 不同于其他编程语言,因为它与这个基础设施紧密相连。

脚本语言对于解决许多服务器端问题很有意义,它允许更快、更便宜地编写业务逻辑,但大多数正在编写的代码不受计算的限制,而是受生产力的限制 —— 编写速度和开发人员的金钱成本。

脚本语言(Python、Ruby、Lua、Shell、Perl、Smalltalk、JavaScript)非常相似,在语法和 API 方面存在差异,但几乎没有其他可以与之对比的地方。这一点,相信每一位在 Rust 或 C 中工作过的人都能理解脚本语言的感受。

Ryan Dahl 总结称,脚本语言很有用,但它们几乎都是一样的,其中 “JavaScript 的使用要广泛得多,而且是未来的证明。因此,将 JavaScript视为通用脚本语言是有道理的”。

服务器软件高级别容器:JavaScript 沙箱

Javascript 中的沙箱并非传统意义上的沙箱,它是一种语法上的 hack 写法,指 Javascript 中处理模块依赖关系的闭包。

image.png

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

相关文章
|
7月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
11月前
|
资源调度 JavaScript 前端开发
Day.js极简轻易快速2kB的JavaScript库-替代Moment.js
dayjs是一个极简快速2kB的JavaScript库,可以为浏览器处理解析、验证、操作和显示日期和时间,它的设计目标是提供一个简单、快速且功能强大的日期处理工具,同时保持极小的体积(仅 2KB 左右)。
642 24
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
1000 17
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
286 32
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发
【JavaScript】——JS基础入门常见操作(大量举例)
JS引入方式,JS基础语法,JS增删查改,JS函数,JS对象
|
存储 JavaScript NoSQL
Node.js新作《循序渐进Node.js企业级开发实践》简介
《循序渐进Node.js企业级开发实践》由清华大学出版社出版,基于Node.js 22.3.0编写,包含26个实战案例和43个上机练习,旨在帮助读者从基础到进阶全面掌握Node.js技术,适用于初学者、进阶开发者及全栈工程师。
302 9