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 的默认设置是无限期缓存。