Deno 1.9加入全新原生HTTP/2服务器

始成立公司的Deno发布最新的1.9版本,这个版本有许多新功能以及性能改进,包括请Hyper团队打造了一个原生HTTP/2网页服务器,改善吞吐量达48%,而且在新版本还大幅强化Rust调用,改进了98%的性能,并且提升所有常用功能性能达3倍。

当前Deno的HTTP服务器为std/http,这是一个使用纯TypeScript开发,构建在TCP Socket之上的实例,该实例尽管是一个脚本式HTTP服务器,但是在尾延迟(Tail Latency)上的表现却十分良好,因此官方提到,std/http唯一的缺点就是只支持HTTP/1.1,并且难以升级成为HTTP/2。

而官方也不想花费心力在开发HTTP组件上,因此便聘了Hyper团队替Deno构建了一个全新HTTP/2服务器API,与纯TypeScript的HTTP服务器std/http相比,在他们使用hello-world程序代码测试下,发现新服务器提升了48%的吞吐量。目前新HTTP/2服务器API仍在测试阶段,开发者需要在API使用–unstable标签,官方提到,他们会尽量让API进入稳定阶段。

在Deno 1.9中,调用Rust的性能也获得大幅度的改进,官方做了许多努力,改善绑定基础设施效率,包括移除了1,500行核心程序代码,并且改善基准绑定性能开销达98%,官方提到,这些工作将会创建更干净的操作基础,使得未来扩展组件以及优化工作更容易。

官方解释,在Deno的早期版本中,opCall遵循请求和回应模式,并将资料编码成为ArrayBuffers自定义有效负载,而这些负载使用各种编码,包括JSON、Flatbuffers甚至是自定义二元编码,而这不只造成性能瓶颈,也提高复杂性和造成碎片化的问题。

因此官方现在决定与其在这些二进制格式之间来回串行化,倒不如直接在v8和Rust之间的值串行化会更有效率,基于这样的想法官方开发了serde_v8函数库,目的是要在v8和Rust之间,提供最大性能且零开销的双向映射,而因为serde_v8函数库是使用Rust结构串行化函数库serde构建而成,所以开发者也能以熟悉的方法使用serde_v8。

这样的改进大幅提升了Deno的效率,并且使得HTTP平台的吞吐量与延迟表现更好,开发者可以看到自己的Deno应用程序,在大负载或是存在opCall效率瓶颈的情况,于新的版本获得大幅性能提升,另外,Deno许多常见的功能,效率也都比过去增加了2倍。