什么是 fastify-auto-etag
fastify-auto-etag
是一款基于 fastify 的 npm 包,能够为 HTTP 随机生成 ETag 并将其缓存起来,同时当请求头中携带了 If-None-Match 时,能够返回 304 Not Modified。这款包的作用是帮助我们优化 Web 服务器性能,减少不必要的响应时间。
安装和使用方法
安装:
我们可以通过 npm 进行安装:
npm i fastify-auto-etag
使用:
使用 fastify-auto-etag
非常简单,只需在服务器初始化时将其注册即可:
const fastify = require('fastify'); const fastifyAutoEtag = require('fastify-auto-etag'); const server = fastify(); server.register(fastifyAutoEtag);
这样,我们就完成了 fastify-auto-etag 包的注册。
配置项
fastify-auto-etag 还提供了一些可配置项,例如 ETag 的生成方式、缓存时间等,我们可在注册时通过配置对象进行设置。
示例:
server.register(fastifyAutoEtag, { algorithm: 'md5', maxAge: 3600, // 缓存一小时 excludeRoutes: ['/healthcheck'], // 排除 /healthcheck 路径 dnsPrefetchControl: true, });
其中,algorithm
设置 ETag 生成所用的算法,默认为 "sha1"
;maxAge
设置缓存时间,以秒为单位,默认为 60
秒;excludeRoutes
可以排除某些路由不进行 ETag 生成和缓存;dnsPrefetchControl
可以控制是否允许 DNS 预取,开启后可以提高首次访问速度。
我们也可以在路由处理函数中使用可选参数,来设置每个 ETag 的缓存时间,如下所示:
server.get('/foo', (req, reply) => { const etag = 'foo-etag'; reply.etag('foo-etag', { maxAge: 60 * 10 }); // 缓存 10 分钟 return { message: 'foo' }; });
注意事项
确保 fastify 版本为
>=2.0.0
。使用 ETag 时,需要在处理函数最后调用
reply.etag
方法,用于告知客户端此 ETag 的值和缓存时间,井返回 JSON 结果,例如:server.get('/foo', (req, reply) => { const etag = 'foo-etag'; // 生成 etag reply.etag(etag, { maxAge: 60 }); // 返回 etag 和缓存时间 return { message: 'foo' }; // 返回 JSON 结果 });
总结
fastify-auto-etag 是一款优秀的 npm 包,允许我们针对 HTTP 请求随机生成 ETag 并进行缓存,从而提高 Web 服务器性能,减少不必要的响应时间。使用该包需要注意 fastify 的版本号以及在处理函数中使用 reply.etag
方法,以及可选参数的配置。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067350890c4f727758395c