理解 Deno

王谙然 · · 1736 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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 资源。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:王谙然

查看原文:理解 Deno

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1736 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传