1.9

2021-04-14 04:31:54

今天我们正在发布丹诺1.9.0。此版本包含许多新功能,性能改进和错误修复:

如果您已安装Deno安装,则通过运行Deno升级,您可以升级到1.9。如果您首次安装DENO,则可以使用以下方法的ONEOF:

#使用shell(麦克斯和linux):curl -fssl https://deno.land/x/install/install.sh | Sh#使用PowerShell(Windows):IWR HTTPS://deno.land/x/install/install.ps1-useb | iex#使用homebrew(麦斯科斯):酿造install in deno#使用scoop(windows):scoop安装deno#使用巧克力(windows):choco安装deno

Deno,STD / HTTP中的当前HTTP服务器,在TCP套接字顶部的纯版本中屏蔽。尽管使用脚本HTTP服务器,它已无法查看Goodtail Latency。但是,STD / HTTP'它的主要缺点是它仅是HTTP / 1.1 - 没有轻松的路径向HTTP / 2前进。

最终,我们希望在编写HTTP服务器的业务中。 HTTP等因素是非琐碎的,并且已经实现了很好的HTTP服务器的独特码。

与STD / HTPPPURE TypeStript HTTP服务器相比,绑定在48%时提高了Hello-World吞吐量。

我们希望很快稳定这个新的API,但现在您必须使用 - 不稳定标志。请测试它并为我们提供反馈。

const body = new textencoder()。编码(" hello world");用于等待(丹诺·列斯滕的const conn({port:4500})){(async()=> {用于等待( deno.servehttp(conn)的const {respoldwith}){respoldwith(新响应(body));}});}

我们已经特别注意使用相同的请求和响应对象Asthe Fetch()API使用。请求和响应对象都具有SEMEREABLEBODIES,允许与客户端进行全双工通信。

我们将我们的绑定基础设施重建为明显更简单,更简单。更快:我们' vere从核心,改进的基线绑定(AKA OPS或OPCALLS)开销超过1500辆净编码线,高达〜65倍或-98%,并拥有建立的欧普普及,应该为我们提供良好的前进(对于插件,未来优化等......)。

在以前的丹诺版本中,OPCALLS遵循一个请求/响应模式,在Custom&#34中编码其数据;有效负载" ArrayBuffers。从历史上看epayloads使用了各种编码,从JSON,FlinBuffers到自定义二进制码,这不仅是一个性能瓶颈,它是复杂性和碎片的实质性源。

@aarono建议,而不是在这些二进制格式,js&amp之间序列地序列化。 RUDE,它将直接在V8和RUST值之间进行更有效的TOSERIALIZE。遵循该洞察力和水上读物原型,Serde_v8 Was出生。 Serde_v8旨在提供A"最大高效"或者"零开销" v8&amp之间的双射。 Rust价值虽然剩下富有表现力和熟悉的(因为它建造了David Tolnay' S Finnastic Serde图书馆)。

基线op开销是一个重要的基准,它测量给定类OPCALLS的最低成本(在每呼叫的纳秒中):

这些运算层改善areN' t简直是学术,它们大大提升了'效率,并帮助提供了我们的HTTP长椅上的吞吐量和延迟收益。您应该在重负荷下看到自己的多孔曲线图的改进,或者以前通过opcallefiency瓶颈。

如您所知,丹诺中的许多常见功能现在可以更快地〜3倍。

我们在此提单中引入了对Blob的支持:(也称为对象URL)。用于创建和撤销Blob URL的API与Browser中的相同:

const blob = new blob([" hello world!"]); const url = url.createobjecturl(blob); console.log(URL); // blob:null / 7b09af21-03d5-461e-90a3-af329667d0acconst resp = await fetch(url); console.log(await resp.text()); // hello world!url.revokeobjecturl(URL);

BLOB URL可以用于获取,以实例化Web工作者使用新工作人员以及动态导入(使用导入())。

在此版本丹麦语言服务器中,工具供电编辑器扩展前所未有的新功能和改进。

首先,我们已经改进并重新引入了从旧的VS代码扩展名的导入完成功能。它允许用户在ImportStatement中获取完成。 LSP为本地文件提供完成,文件已下载到Deno_Dir缓存,以及注册表完成。

要为https://deno.land/x注册表启用完成添加以下Toyour与代码(或其他编辑器)设置:

{"丹诺&#34 ;: {"建议&#34 ;: {"进口&#34 ;: {"主机&#34 ;: {" https://丹麦.land":true}}}}}}}}}}}}}}}}}}}}}}}

https://deno.land/x目前提供注册表自动完成。我们秉承更多的注册管理机构将实施注册管理委员会,以支持这一新细则。 SkyPack注册表已显示出兴趣,并且很快就会得到支持。如果要为自己的注册表添加支持,则可以阅读注册表完成文档。

除了新的导入完成外,我们还实现了TextDocument / FoldingRange和TextDocument / SelectionRange LSP功能,符合编辑器在选择期间提供更好的文本捕捉,以及BetterSupport用于折叠和扩展代码块。

此版本还包括LSP的许多错误修复,Windows系统上有一个突出的一个位于Windows系统上的错误,导致LSP遇到特定文件:// URL时恐慌。

丹诺' s许可标志的几个允许列表,使其成为拍摄程序' s权限的肉质。例如,-Alow-read = / tmp rantsread允许到./tmp目录。

在1.9之前,--allow-env和-allow-run都没有,这意味着传递这些标志,分别将这些标志授予完全访问环境变量,并分别在系统上产生任何二进制文件的子进程。

现在,可以确定程序应该haveacess的环境变量,或者允许哪些子过程允许spawn:

目前在德诺,如果您运行程序缺少相应的PermisionFlag,它将抛出错误并退出。在1.9中,我们正在添加--Prompt旗帜允许用户迭代授予权限,因为期间需要它们。

使用 - 尝试从internet运行一次性脚本时尤其有用 - 您不需要了解所有必需的权限,而是在没有任何权限的情况下运行脚本,而不是授予或拒绝它们一个ASTHEY该程序。

请告诉我们 - 如果--prompt对您有用。我们正在考虑在将来的释放中默认情况下截止。

http / 2协议是连接不可知的。这意味着它可以使用ONA UNIX套接字,TCP套接字或使用TLS连接。主要的WebBrowsers仅允许HTTP / 2通过TLS连接,该连接宣布支持HTTP / 2握手的TLS握手。这是通过&#34的;应用层协议&#34完成; TLS扩展,也称为ALPN。 Tlshandshake的此扩展允许TLS服务器和客户端协商哪个应用程序协议,它们将用于在TLS连接上进行通信。在Web上到TwoDominant应用程序协议是HTTP / 1.1和HTTP / 2。这些拥有AlpnProtocol名称" http / 1.1"和#34; H2"分别。浏览器只会向HTTP / 2支持的服务器发送HTTP / 2REQUEST,以及ALPN协议所荣耀,或者仅" http / 1.1"在ALPN协议中列出,HTTP / 1.1将被禁止。

到目前为止,STD / HTTP服务器仅支持HTTP / 1.1,因此没有人们在TLS连接上支持ALPN。随着丹诺的引入改变了这个版本中的丹诺。要在denopossible中制作完整的http / 2,我们现在已添加支持在使用deno.listentls启动TLS侦听器时指定若要的ALPN协议。

const listener = deno.listentls({port:443,certfile:" ./ cert.pem",keyfile:" ./ key.pem",AlpnProtocols:[" H2和#34 ;," http / 1.1"],});对于等待(侦听器的const conn){handleconn(conn);} async函数handleconn(conn:deno.conn){const httpconn = deno .servehttp(conn);用于等待(Const {Request,Htthconn的Repact and andergy){ReacketWith(新请求(响应$ {request.url}`)); }}

在努力制作更多使用丹诺直接携带的丹诺和其他非丹诺运行时编写的代码,我们已经决定弃用systemapis未备份的丹麦名称空间中的所有API。这些API将移动到丹哥标准库,该库也可以在浏览器中使用。

这些API已移至STD / IO模块。 我们在丹诺Lint中推出了一个新的Lintrule,发现并警告您的使用这些不稳定的API.it还将建议现在可以找到标准库中的位置。 我们计划将这些已弃用的API删除为Deno 2.0。 可以在将来的2.0 Pre-2.0版本中引入更多的泛化级别消息。 请尽快使用这些已弃用的API的代码。 在此版本中,我们已更改默认的丹诺tsconfig以包括"任命任命的forclassfields&#34 ;: true选项。 此选项对齐类型'对标准ECMA脚本语义的类字段的毛河。 此选项不能在用户代码中覆盖。 我们希望大多数用户不需要划分代码。