Deno 初心和 Node.js 类似,是想在动态 Scripting 领域里面「净化」 Node.js。

有趣的点

  • 相比 Node.js:
    • NO build-scripts / NO webpack 😲
    • NO node_modules 😲
    • Natively support typed language systems as typescript 😎
    • 安全沙箱:文件、网络、环境权限需要单独授权
  • 模块系统 like 👇
  1. import { serve } from "https://deno.land/std@0.50.0/http/server.ts";
  • Promise 底层重新实现,相比 Node.js EventEmitter 实现的 Promise,基于 Rust 实现了更加底层的 Promise 实现,比如 Socket 这一层,Promise 可以将异步的处理机制「原生」到这一步;
    • All async actions in Deno return a promise. OMG!
  • Single executable 📦
  • Browser compatible 🙏🏻: The subset of Deno programs which are written completely in JavaScript and do not use the global Deno namespace (or feature test for it), ought to also be able to be run in a modern web browser without change. check here; 原生支持「Bundler」特性;

细节

关于 TS 和 Deno 的关系?

Internally Deno uses Microsoft’s TypeScript compiler to check types and produce JavaScript. Compared to the time it takes V8 to parse JavaScript, it is very slow.

TS 的命。Deno 团队打算将 TSC(Typescript Compiler)使用 Rust 重写。


关于 Deno 的层次结构设计:


本质上,Deno 实现了独立的模块管理系统、沙箱系统、构建系统,集成为一体。


所有系统调用都通过消息传递完成(protobuf 序列化); 基础的系统架构示意图 👇:

image.png

问题的点

  • 生态还处于萌芽阶段:生态体系比起 Node.js 确实很弱;虽然 js / ts 可以实现迁移但依旧有成本;
  • 成熟度不高,产品级别(特别是大规模产品)的使用案例目前很少,不像 Node.js 在生产环境里面比比皆是;
  • 官方对兼容性的思考:

Although Deno has taken a hardline approach to simplifying the module system, ultimately Deno and Node are pretty similar systems with similar goals. Over time, we expect Deno to be able to run more and more Node programs out-of-the-box.

一些思考

问题 WIP:

  • Deno 可以直接写 Native UI 么? => Topic Here,众人都在尝试,WebView Deno 是一种尝试方向;Rust 原生的 UI 也是一种方向(看微软 / Apple 老哥如何发力了);
  • Deno 作为 Server 的成熟度如何?=> 官方答疑,小型项目感觉完全没问题,大型项目(商业级)还是属于 EARLY 范畴;

实践:

  • 可以尝试一些 工具型的项目,or 想法玩具原型 基于 deno 去实现,感觉会比较有意思;
  • 可以尝试看一下 stlib 里面 deno 是如何重新实现 ws、fs 等模块的,很骨感 😌;
  • 另一个非常适合 deno 的场景就是基于 JS 的 serverless 云服务,原来使用 Node.js 要想尽办法封闭的接口,现在好了,我们提供什么,都可以指定,另外基于 proto 和 golang 的底层通讯,也完全可以让服务本身足够健壮和稳定。 —— Yorkie 的回答 - 知乎
  • Deno 高性能场景可以和 WebAssembly 连接在一起;

其它

😂

  • node => deno
  • koa => oak

参考