写点什么

Deno 2021 回顾:优化内核、兼容 Node.js

Aaron O'Mullan 等人

  • 2022-02-09
  • 本文字数:1927 字

    阅读完需:约 6 分钟

Deno 2021 回顾:优化内核、兼容 Node.js

2021 年是 Deno 获得资助发展的第一个整年。我们的公司有 10 个员工,而且还在不断增加。

 

Deno CLI 自从 2020 年 5 月发布 1.0 版本之后就已经在稳定地发展了。2021 年,我们推出了 44 个版本(11 个小版本,33 个补丁),上新了关键特性,修复了大量错误,并进行了重大性能优化。关于每个版本的细节,请参阅相应的博文:v1.7v1.8v1.9v1.10v1.11v1.12v1.13v1.14v1.15v1.16v1.17

 

让我们来讨论一些重要的发展。

 

Deno Deploy

 

我们在去年夏天推出了 Deno Deploy 的首个测试版本。这是一款由我们的工程师团队从头开始构建的现代无服务器云,允许用户非常快速地将 JavaScript、TypeScript 和 WASM 服务部署到世界各地的数据中心。

 

我们正在积极开发和投资 Deno Deploy。我们将其视为构建 Node.js 和 Deno CLI 之后的第三个 JavaScript 运行时。我们非常高兴能有机会使用云优先原语来构建现代运行时,而这些原语可以塑造团队构建和发布软件的方式。我们想在接下来的数个月中与大家分享更多有关新一代系统的信息。

 

优化的内核

 

Deno 的内核提供了“opcalls”(类似于 syscalls),它可以让 JavaScript 调用运行时提供的 Rust 函数(fs/net/url-parsing/……)。

 

v1.9 版本之前,我们通过 JSON 和二进制缓冲区的混合来整理 opcall 值。

 

op-layer 的效率是决定运行时整体性能的关键因素。Opcall 以前每次调用有 4000 纳秒的开销,而现在减少了近 100 倍,每次调用有 40 纳秒。

 

这些效率提升的主要归功于 serde_v8,这是我们在 v1.9 版本中设计并交付的 Rust 和 V8 值之间的最大效率的双射。仅此一项,就将 URL 解析等常见操作的成本降低了 3 倍以上,并使 Deno 成为成熟的快速 JS 运行时。

 

原生 HTTP

 

Deno v1.9 中,我们提供了原生的 HTTP 服务器绑定,之后在 Deno v1.13 中得到稳定。通过这些绑定,你可以只用几行代码就能创建由 hyper 支持的高性能 HTTP 服务器。


import { serve } from "https://deno.land/std@0.121.0/http/server.ts";serve((_req) => new Response("Hello, world"), { port: 3000 });console.log("Listening on http://localhost:3000");
复制代码


因为这些绑定是建立在 hyper 上的,它们提供了巨大的吞吐量和延迟。

 

MDN 兼容性表

 

2021 年 8 月,Deno 被添加到 MDN 兼容性表中。



Deno 非常重视 Web 兼容性;我们用 WPTWeb Platform Tests,Web 平台测试)对 Deno 进行了测试,WPT 是所有主要浏览器使用的测试套件,以确保符合规范。测试套件的结果可以在 wpt.fyi 上找到。

 

外部功能接口

 

在 Deno v1.13 中,我们用一个新的外部功能接口(Foreign Function Interface,FFI)API 取代了不稳定的插件系统。FFI 仍然被认为是不稳定的,但我们认为这是一个重大的改进。

 

在 1.13 版之前,原生插件系统允许使用 Rust 编写的动态库。由于 Rust ABI 的不稳定,以及将 API 作者限制在一种语言中,我们决定用一个通用的 FFI API 来取代这个系统。这个 API 允许开发者用任何使用 C 语言调用约定的语言来编写 Deno 运行时的“扩展”。

 

我们已经看到一些使用 FFI API 的有趣项目,展示了 FFI API 的强大功能:

 

 

Slack 与下一代平台

 

2021 年 11 月,Slack 宣布其基于 Deno 的下一代开发平台。除了 Slack,我们一直在与其他合作伙伴合作,以开发和交付伟大的 Deno 赋能产品。我们相信 Deno Deploy 的“隔离即服务”为以下方面提供了坚实的基础:

 

  • 现代边缘托管

  • 用户可扩展的平台(机器人、插件、应用程序等。)

  • 低代码解决方案

 

Node.js 兼容性

 

在 2021 年第四季度,我们开始努力提供一流的 Node.js 兼容性。允许 Deno 直接在 Deno 中运行为 Node.js 开发的应用程序和库(NPM 包),没有任何变化。

 

Deno v1.15 中,我们提供了“兼容模式”的第一个预览。该特性仍然不稳定,但可以使用 --compat 标志启用。大部分的工作涉及在 std/node 中提供 polyfills。

 

一些关键的模块如 tlszlib 仍然不完整,但在目前的形式下,你仍然可以运行重要的应用程序。我们的目标是在未来几个月内推出适合所有用户的第一个迭代版本。

 

通往 Deno 2 的道路

 

2021 年 9 月,我们开始讨论 Deno 2 版本可能是什么样子的。API 中有很多细微的改变需要处理,但是我们也在调查基本的变化,以改善 Deno 的工作流。预计不久之后,我们将发布 Deno 2 的路线图,并希望在今年上半年就能交付。它将专注于更好的 NPM 生态系统的兼容性,为常见的工作流程提供更好的 DX,并探索替代的包管理解决方案。

 

作者介绍:

 

Aaron O'Mullan,Deno 首席工程师;Bartek Iwańczuk,Deno 工程师;Ryan Dahl,Deno 首席执行官。

 

原文链接:

 

https://deno.com/blog/deno-in-2021

2022-02-09 15:1211843

评论

发布
暂无评论
发现更多内容

QuTrunk与MindSpore量子神经网络初探

启科量子开发者官方号

人工智能 ai框架 量子编程

web前端和java培训学编程哪个更好

小谷哥

New Features | NFTScan 推出 BlueChip、Watch List、Activity Overview

NFT Research

区块链 NFT 数据基础设施

Service Mesh 的下一站是 Sidecarless 吗?

SOFAStack

MOSN

深入了解瓴羊Quick BI,对于商业智能BI发展情况更好分析

巷子

制造业数字化发展,瓴羊Quick BI引起了需求者的关注

夏日星河

常规加密算法是什么?原理是怎么样?有哪些?

行云管家

算法 加密算法 国密

跨越速运如何构建实时统一的运单分析

StarRocks

#数据库

面试合集:数据库+数据结构+JVM+网络+JAVA+分布式+操作系统

钟奕礼

Java 程序员 java面试 java编程

亚信科技亮相南京软博会,数智赋能百行千业

亚信AntDB数据库

AntDB aisware antdb AntDB数据库

开源共建 | TIS整合数据同步工具ChunJun,携手完善开源生态

袋鼠云数栈

大数据 开源 数据同步工具

元器选型攻略之 电阻

元器件秋姐

元器件知识 元器件科普 电阻 电阻定义 常见电阻

LeetCode题解:938. 二叉搜索树的范围和,栈,JavaScript,详细注释

Lee Chen

JavaScript LeetCode

java 环境变量配置详细教程(2023 年全网最详细,没有之一)

千锋IT教育

java程序员,是不是很想进字节跳动?开发三年的我拿到了入职通知

钟奕礼

Java 程序员 java面试 java编程

Intel Arch SIG:介绍下一代数据中心互联协议CXL及在龙蜥的规划 | 第 54 期

OpenAnolis小助手

开源 直播 intel 龙蜥大讲堂 CXL

火山引擎 DataTester 智能运营,帮企业实现“千人千面”精准营销

字节跳动数据平台

A/B 测试

TCL 基于 StarRocks 构建统一的数据分析平台

StarRocks

#数据库

华夏银行:详解iDo平台一体化运维的落地过程

嘉为蓝鲸

运维 金融 银行 数字化

阿里P8面试官总结的《2022最新年底java面试题》,搞定90%以上的技术面

钟奕礼

Java 程序员 java面试 java编程

云计算和虚拟化的三个小区别简单说明

行云管家

云计算 虚拟化

通过支付网关提高第三方支付接入效率

产品海豚湾

产品经理 产品设计 支付系统 产品架构 11月月更

磐久网络|揭秘阿里云HAIL数据中心网络

云布道师

阿里云 数据中心 基础设施建设

供应链-数字化招投标/采购/供应商管理系统

金陵老街

数字化 Java‘’ Vue 3 spring-boot

火山引擎DataLeap的Data Catalog系统公有云实践

字节跳动数据平台

大数据 火山引擎 大数据研发

教你用JavaScript完成进度条

小院里的霍大侠

JavaScript 编程开发 初学者 入门实战

透明LED屏幕如何设计显示效果更好?

Dylan

LED LED显示屏

前端培训程序员不好招吗,应该怎么学习

小谷哥

降价背后,函数计算规格自主选配功能揭秘

阿里巴巴云原生

阿里云 云原生 函数计算

基于云边协同架构的五大应用场景革新

阿里云CloudImagine

阿里云 边缘计算 边缘云

瓴羊Quick BI自助式报表分析工具,令企业的运营服务更高效

夏日星河

Deno 2021 回顾:优化内核、兼容 Node.js_大前端_Aaron O'Mullan 等人_InfoQ精选文章