经过两年的发展
重要的版本号与 Deno 命名空间中 API 的稳定性相关,这些 API 负责应用程序与操作系统的交互。 目前已有的软件界面
创建新 JavaScript 平台的主要动机是希望消除概念错误,
主
- 面向安全的默认配置。 默认情况下禁用文件访问、网络和对环境变量的访问,必须显式启用。 应用程序默认运行在隔离的沙箱环境中,在未授予显式权限的情况下无法访问系统功能;
- 除了 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