拥抱标准才能更好地被接受,长期成本也会更低。
阿里云 CDN 为边缘脚本造了个 EdgeScript(简称也是 ES),不知道有多少人在用。同样是边缘脚本,Cloudflare Workers 就很容易被接受,因为它就是标准的 JavaScript。当然这两个服务提供的能力不同,直接这么比较可能不是很恰当。
之前在某厂搞接入层和 API 网关的时候,为了提供定制化的能力(复杂的接口聚合、重构,自定义维度的灰度切流等等),配置需要是图灵完备的。考虑到执行的过程需要在一个限制了资源的沙盒里,调研了一番当时的各种主流技术方案,自己搞了一套 JS like 的嵌入式语言和运行时。
后来想明白了,即便这个语言再 JS like,它也不是 JS,使用者必然有学习成本。又因为这语言并不是某一种大众所接受的标准,文档和实现的质量是没法跟大众语言相比的,各种配套设施(比如 syntax highlighting、autocomplete、各种库)也需要从零开始。
后来我索性选了一个比较成熟的 JS 引擎,造了一个现在看来跟 Cloudflare Workers 差不多的东西。当然,如果现在再做技术选型,我可能会选择 WASM + QuickJS 或者跟 Cloudflare Workers 一样上 V8。因为 WASM 在各种意义上已经成为了一种标准,也有很多成熟的运行时,比如 WasmEdge Runtime。Cloudflare Workers 也证明了他们那套沙盒机制在生产上是可行的。
回到阿里云 CDN EdgeScript 这个例子,从零到一造一个 EdgeScript 肯定比引入个 V8 来得可控,毕竟代码是要跑在边缘节点上的,一个用户的代码不能影响到整个节点的稳定性。但是从长远看这个语言的使用成本、更新维护成本都很高,从设计上来看也很粗糙,不像是能够成为业界标准的语言。反之,如果拥抱标准,使用 JS 或者其他成熟的语言,开始的成本会高,但长远来看基本没有需要额外操心的事情,使用者可以很快上手,配套设施也很完善,Cloudflare Workers 的某些 API 甚至可能成为边缘脚本运行时的一种标准(事实上 Cloudflare Workers API 设计也是尽可能兼容 Web 标准)。
今天看到 Sciter 这个 UI 引擎(可以类比成一个超级轻量级的 Electron)也开始把他们家的嵌入式语言从自研的 TIScript 换成 JS(QuickJS)了,更坚定了我的这个想法,不知道下一步会不会把他们自己的 HTML / CSS DSL 也逐步替换成标准的 HTML / CSS。
