Node.js 的作者提出了安全的 JavaScript 平台 Deno 1.0

经过两年的发展 提交 第一个主要版本 迪诺1.0,一个用于独立执行 JavaScript 和 TypeScript 应用程序的平台,可用于创建在服务器上运行的处理程序。 该平台由 Ryan Dahl 开发(瑞安·达尔(Ryan Dahl)),Node.js 的创建者。 与 Node.js 一样,Deno 使用 JavaScript 引擎 V8,它也用于基于 Chromium 的浏览器。 同时,Deno 并不是 Node.js 的分支,而是一个从头开始创建的新项目。 项目代码 分发者 根据麻省理工学院的许可。 组件 准备好的 适用于 Linux、Windows 和 macOS。

重要的版本号与 Deno 命名空间中 API 的稳定性相关,这些 API 负责应用程序与操作系统的交互。 目前已有的软件界面 不稳定,默认隐藏,仅在“--unstable”模式下运行时可用。 随着新版本的形成,此类API将逐渐趋于稳定。 全局命名空间中的API包括setTimeout()、fetch()等常用函数,尽可能接近传统Web浏览器的API,并且按照浏览器的Web标准进行开发。 Rust 提供的直接在平台代码中使用的 API,以及为 Deno 运行时开发插件的接口,目前还没有稳定下来,还在继续开发。

创建新 JavaScript 平台的主要动机是希望消除概念错误, 承认 Node.js架构中,为用户提供更安全的环境。 为了提高安全性,V8 引擎是用 Rust 编写的,这避免了许多由低级内存操作引起的漏洞,例如释放后访问、空指针取消引用和缓冲区溢出。 平台用于以非阻塞方式处理请求 东京,也是用 Rust 编写的。 Tokio 允许您创建基于事件驱动架构的高性能应用程序,支持多线程并以异步方式处理网络请求。

产品特点 德诺:

  • 面向安全的默认配置。 默认情况下禁用文件访问、网络和对环境变量的访问,必须显式启用。 应用程序默认运行在隔离的沙箱环境中,在未授予显式权限的情况下无法访问系统功能;
  • 除了 JavaScript 之外,还内置了对 TypeScript 的支持。 标准 TypeScript 编译器用于检查类型并生成 JavaScript,与 V8 中的 JavaScript 解析相比,这会导致性能下降。 未来,我们计划准备自己的 TypeScript 类型检查系统实现,这将使 TypeScript 处理性能提高一个数量级;
  • 运行时以单个独立可执行文件(“deno”)的形式出现。 要使用 Deno 运行应用程序就足够了 下载 其平台有一个可执行文件,大小约为20 MB,没有外部依赖性,不需要在系统上进行任何特殊安装。 而且,deno 不是一个单体应用程序,而是 Rust 中 crate 包的集合(deno_core, 生锈_v8),可以单独使用;
  • 启动程序以及加载模块时,可以使用 URL 寻址。 例如,要运行welcome.js程序,您可以使用命令“deno https://deno.land/std/examples/welcome.js”。 来自外部资源的代码被下载并缓存在本地系统上,但永远不会自动更新(更新需要使用“--reload”标志显式运行应用程序);
  • 在应用程序中通过HTTP高效处理网络请求;该平台专为创建高性能网络应用程序而设计;
  • 能够创建可以在 Deno 和常规 Web 浏览器中执行的通用 Web 应用程序;
  • 可用性 标准模块集,其使用不需要绑定外部依赖项。 标准集合中的模块已经过额外的审核和兼容性测试;
  • 除了运行时之外,Deno 平台还充当包管理器,允许您通过代码内的 URL 访问模块。 例如,要加载模块,您可以在代码中指定“import * as log from “https://deno.land/std/log/mod.ts”。 通过 URL 从外部服务器下载的文件会被缓存。 绑定到模块版本是通过在 URL 中指定版本号来确定的,例如“https://unpkg.com/[电子邮件保护]/dist/liltest.js";
  • 该结构包括一个集成的依赖性检查系统(“deno info”命令)和一个代码格式化实用程序(deno fmt);
  • 所有应用程序脚本都可以合并到一个 JavaScript 文件中。

与 Node.js 的区别:

  • Deno 不使用 npm 包管理器
    并且不依赖于存储库,模块通过 URL 或文件路径进行寻址,并且模块本身可以放置在任何网站上;
  • Deno 不使用“package.json”来定义模块;
  • API 差异,Deno 中的所有异步操作都会返回一个 Promise;
  • Deno 要求显式定义文件、网络和环境变量的所有必要权限;
  • 处理程序未提供的所有错误都会导致应用程序终止;
  • Deno 使用 ECMAScript 模块系统,不支持 require();
  • Deno 的内置 HTTP 服务器是用 TypeScript 编写的,运行在本机 TCP 套接字之上,而 Node.js HTTP 服务器是用 C 编写的,并提供 JavaScript 的绑定。 Deno 的开发人员专注于优化整个 TCP 套接字层并提供更通用的接口。 Deno HTTP Server 提供较低的吞吐量,但保证可预测的低延迟。 例如,在测试中,一个基于 Deno HTTP 服务器的简单应用程序能够每秒处理 25 万个请求,最大延迟为 1.3 毫秒。 在 Node.js 中,类似的应用程序每秒处理 34 个请求,但延迟范围为 2 到 300 毫秒。
  • Deno 与 Node.js (NPM) 的包不兼容,但正在单独开发 夹层 为了与标准 Node.js 库兼容,随着它的发展,越来越多为 Node.js 编写的应用程序将能够在 Deno 中运行。
  • 来源: opennet.ru

添加评论