Node、Deno、Blink 与 V8 的关系

523 阅读2分钟

由来

Node大家耳熟能详不多介绍了, DenoNode 之父 Ryan Dahl 在 2018年5月发布的开源项目,可以被认定为 Node 的下一代或是替代者

Deno出现原因

首先,作者 ry 深感Node太难用了,但是又觉得 Node 改进起来太麻烦 ,所以立项了 Deno 通过  V8、Rust 和 Tokio 的基础上开发。

Deno 的功能亮点

  • 尽可能的兼容 Web 规范,例如使用 ES modules、支持 fetch 等。
  • 默认安全。代码不能访问文件、网络、环境变量等(除非显式开启)。
  • 支持开箱即用的 TypeScript 的环境。
  • 只发布一个独立的可执行文件 (Deno)。
  • 有着内置的工具箱,比如代码格式化工具 (Deno fmt),a linter (Deno lint) 和测试工具 (Deno test)
  • 有一组经过审计的 标准模块,保证能在 Deno 上工作。
  • 脚本代码能被打包为单独的 JavaScript 文件。

与 Node.js 的比较

  • Deno 不使用 npm
    • Deno 使用 URL 或文件路径引用模块。
  • Deno 在模块解析算法中不使用 package.json
  • Deno 中的所有异步操作返回 promise,因此 Deno 提供与 Node 不同的 API
  • Deno 需要显式指定文件、网络和环境变量的访问权限。
  • 当遇到未捕获的错误发生时,Deno 总是会异常退出。
  • 使用 ES 模块,不支持 require()。第三方模块通过 URL 导入:

Node、Deno 和 v8 的关系

首先 Node 是基于 v8 运行的, v8常规是内嵌到Blink内核中作为JS的解析模块使用的,而Blink的前身WebKit 同样使用V8作为JS引擎

WebKit 内核是由多方组建出的内核,是一个开源项目 其中 googlesafari 等属于是提供代码者

为什么会衍生出 Blink

Blink 是因为 google chormium 理念和 WebKit 产生分歧 ,并且由于WebKit 是有多方博弈审定规范的,分裂出来的Blink删除了WebKit中其他平台的相关的无用代码,并将部分规范进行修改。

这里的协议指代 DOM 移入 JS 中 、 跨进程 iframe 使用单独沙盒进行渲染等操作

V8和 Blink 的关系

浏览器组成分为以下部分,Blink 也就是 Broswer Engine

image.png 其中 Rendering Engine 部分为渲染核心 ,内部的JS引擎部分是用的是V8解析。

总结

NodeDeno 都是使用V8去解析运行JS,并在原来的基础上,加入扩展模块,如fs、path、buffer等模块。