理解 Deno

2019-02-14  本文已影响17人  王谙然

deno: A new way to JavaScript

为什么要花时间学习它呢?

  1. 前端开发 JavaScript 是世界上最大的生态圈。
  2. TypeScript 作为 JavaScript 的超集,兼顾了 JavaScript 灵活性和工程化能力。
  3. V8 使用 EventLoop 并发模型,天生适合事件驱动型场景。
  4. 在后端业务开发逐渐标准化的趋势下,业务开发工具最需要的是可控的效率。
  5. deno 的作者在创建完 node.js 后,总结大量工业经验,系统架构设计得很简洁,简洁的东西稳定性高,根基正,可成大树。

然后,从各种资料里屡清楚这个项目的脉络

  1. 作者 Ryan Dahl 的演讲《10 Things I Regret About Node.js》《Deno, A New Server-Side Runtime》
  2. 官网:https://deno.land
  3. 使用手册:https://deno.land/manual.html
  4. 源码发布信息:Release.md

可以看到 deno 的设计目标:为 TypeScript/JavaScript 提供一个安全简洁的沙箱运行时。

在原型实现里,即 Golang 版本,使用 V8 编译 JavaScript,基于 v8 做了一个叫 v8worker2 的模块,通过消息传递的方式实现 js 和 Golang 的沟通,将消息传递抽象成 send/recv,消息体使用 protobuf 编码,以简化架构。

后面的迭代中,由于 Golang GC 和 V8 GC 使运行时的不确定性大大增加,作者决定用 Rust 重写内核部分,Rust 的 runtime 没有 GC,主要以显示声明资源的所属权来规避资源竞争的问题,没有垃圾产生,故不需要回收。

deno 使用第三方开源库 tokio 作为内部资源异步请求的调度模块。

由于消息体编码模块最重要的高性能,所以也从开始的 protobuf 切换到 flatbuffers。

有了这些背景知识,我们大致就能看懂架构图了:


deno.png

JS 本身通过 V8 编译成可执行文件,通过 libdeno 以收发消息的形式与 deno runtime 沟通,即操作 OS 资源。

上一篇下一篇

猜你喜欢

热点阅读