dns 模块和 node:dns 模块。
Bun 中的 DNS 缓存
Bun 会缓存 DNS 查询结果,使重复连接到同一主机的速度更快。 缓存最多容纳 256 个条目,每个条目最长 30 秒。如果到某主机的连接失败,Bun 会从缓存中移除该主机的条目。到同一主机的并发连接共享同一个 DNS 查询。 此缓存会被以下功能自动使用:bun installfetch()node:http(客户端)Bun.connectnode:netnode:tls
何时应该预取 DNS 条目?
Web 浏览器暴露了<link rel="dns-prefetch">,以便在需要之前解析主机名。在 Bun 中,dns.prefetch 做同样的事情:当你已知即将连接到某个主机并希望避免初始 DNS 查询时使用它。
dns.prefetch
dns.prefetch 在需要之前解析主机名。
dns.getCacheStats()
dns.getCacheStats() 返回当前缓存统计信息,作为一个具有以下属性的对象:
配置 DNS 缓存 TTL
默认情况下,Bun 缓存 DNS 条目 30 秒。要更改 TTL,设置$BUN_CONFIG_DNS_TIME_TO_LIVE_SECONDS 环境变量。例如,设置为 5 秒:
为什么默认是 30 秒?
底层的系统 API(getaddrinfo)不会暴露 DNS 条目的 TTL,因此 Bun 必须选择一个数字。我们选择 30 秒,因为它足够长,可以体现缓存的好处,且足够短,在 DNS 条目发生变化时不太可能引起问题。Amazon Web Services 推荐 Java 虚拟机使用 5 秒,尽管 JVM 的默认配置是无限期缓存。