由来
Node大家耳熟能详不多介绍了, Deno是 Node 之父 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 内核是由多方组建出的内核,是一个开源项目 其中 google 和 safari 等属于是提供代码者
为什么会衍生出 Blink
Blink 是因为 google chormium 理念和 WebKit 产生分歧 ,并且由于WebKit 是有多方博弈审定规范的,分裂出来的Blink删除了WebKit中其他平台的相关的无用代码,并将部分规范进行修改。
这里的协议指代
DOM移入 JS 中 、 跨进程iframe使用单独沙盒进行渲染等操作
V8和 Blink 的关系
浏览器组成分为以下部分,Blink 也就是 Broswer Engine
其中
Rendering Engine 部分为渲染核心 ,内部的JS引擎部分是用的是V8解析。
总结
Node和Deno 都是使用V8去解析运行JS,并在原来的基础上,加入扩展模块,如fs、path、buffer等模块。