Deno 1.26 已正式发布。
主要变化
- 新增
Cache
Web API - WebCrypto Secure Curves
- 新增
--allow-sys
permission flag - 改进对 npm 的支持
- 优化对 Node.js 的兼容性
- 针对
Deno
API 的变更 - 改进
Deno.serve()
API - 提升性能
- 优化 module 下载 UI
- 改进开发者体验
- 升级 TypeScript 至 4.8
Cache
Web API
此版本添加了对Cache
API 的支持。该 API 可用于缓存 Request/Response 对象,对于动态生成 response 的场景十分有帮助。它允许缓存 GET 请求的 response,并从缓存中为类似请求提供 response。
下面是一个基于name
查询生成 response 的示例:
import { serve } from "https://deno.land/[email protected]/http/server.ts";
// Open a cache named v1.
const CACHE = await caches.open("v1");
serve(async (req: Request) => {
// Requests after first request are served from cache.
const res = await CACHE.match(req);
if (res) {
res.headers.set("x-cache-hit", "true");
return res;
}
const { searchParams } = new URL(req.url);
const name = searchParams.get("name");
const response = new Response(`Hello ${name}!`);
// Put response in cache.
await CACHE.put(req, response.clone());
return response;
});
缓存被持久化到文件系统中,所以重启 Deno 不会刷新缓存。
目前实现的 API 包括:
CacheStorage::open()
CacheStorage::has()
CacheStorage::delete()
Cache::match()
Cache::put()
Cache::delete()
WebCrypto Secure Curves
WebCrypto Secure Curves 规范添加了对 Curve25519 和 Curve448 的支持到 WebCrypto API。
Deno v1.26 实现了 CFRG curves Ed25519 和 X25519。
const key = await crypto.subtle.generateKey("X25519", true, ["deriveKey"]);
开发团队表示计划在未来的版本添加对 Ed448 和 X448 的支持。
提升性能
最近发布的几个版本都在持续优化性能。比如,在现有的 TypedArray 中进行文本编码,对于小的有效载荷,最大吞吐量提高了 5 倍;对于大的有效载荷,最大吞吐量提高了 30 倍。详情查看 denoland/deno#15922。
写入小文件时,同步写入Deno.writeFileSync()
的速度快了 1.44 倍,异步写入Deno.writeFile()
的速度快了 1.15 倍。
CSV 解析的性能在 Mac 和 Linux 上都有明显提升:
URL 解析方面,对于没有查询字符串的 Url,URL 解析的速度提高了 2.27 倍,对于有多个查询字符串参数的复杂 Url,速度提高了 1.37 倍。详情查看 denoland/deno#15663。
此版本对文件系统操作和console.log()
也有不少改进:
最后,Deno.consoleSize
与 v1.24.3 相比,TTY 方法的速度提升了 2.4 倍。详情查看 denoland/deno#15976。
优化 module 下载 UI
添加了新的交互式"Download..."消息显示:
完整更新内容查看发布公告。