在 web 应用中,缓存机制是提升网站性能的重要手段之一。Express.js 是 Node.js 中最流行的 web 框架之一,本文将介绍如何在 Express.js 中实现缓存功能。
为什么需要缓存
在 web 应用中,缓存机制可以减少网络流量,加快页面加载速度,降低服务器负载。缓存机制可以将经常访问的页面、图片、脚本等数据保存到客户端或服务器的内存中,在下次请求时直接从缓存中获取,避免重复查询或加载数据。
使用缓存的方式
使用缓存的方式分为两种:客户端缓存和服务器端缓存。
客户端缓存
客户端缓存是将一些静态资源(例如:图片、脚本、样式等)保存到客户端浏览器中,客户端浏览器无需再次请求该资源,直接从本地缓存读取即可。这种缓存方式一般使用 HTTP 头信息中的 expires 和 cache-control 字段进行设置。
expires 字段可以设置缓存过期时间,例如:
Cache-Control: max-age=3600
cache-control 字段可以设置缓存控制方式,例如:
Expires: Fri, 01 Jan 2021 00:00:00 GMT
服务器端缓存
服务器端缓存是将一些动态生成的数据(例如:页面、接口数据等)保存到服务器的内存或硬盘中,下次请求时可以直接从缓存中获取。这种缓存方式可以使用诸如 Redis、Memcached 等缓存存储系统来实现,也可以在应用代码中自行实现。
在 Express.js 中可以通过添加中间件来实现缓存功能。下面详细介绍两种常用的缓存方式:基于内存的缓存和基于 Redis 的缓存。
基于内存的缓存
基于内存的缓存是将动态生成的页面或接口数据保存在服务器内存中,下次访问时直接从内存中读取数据,避免重复查询或处理数据。
-- -------------------- ---- ------- ----- ----------- - --- -------------- ----- --------------- - -------- -- - ------ ----- ---- ----- -- - ----- --- - ------------- - --------------- -- -------- ----- ------------ - --------------------- -- -------------- - ----------------------- ------- - ---- - ---------------- - --------- -------- - ---- -- - -------------------- ----- -------- - ------ ----------------------- -- ------- - -- --
上述代码中,我们定义了一个 memoryCache 对象作为缓存存储器,duration 表示缓存时间。在 cacheMiddleware 中,我们判断请求的 url 是否已经缓存,如果已经缓存则直接返回缓存数据,否则将数据保存到缓存中并设置缓存时间。
使用方法:
app.get("/api/data", cacheMiddleware(30), (req, res) => { setTimeout(() => { res.send({ name: "yideng" }); }, 1000); });
基于 Redis 的缓存
基于 Redis 的缓存可以将动态生成的数据保存到缓存中,并设置缓存时间。下次请求时直接从缓存中读取数据,避免重复查询或处理数据。
-- -------------------- ---- ------- ----- ---------- - --------------------- ----- --------------- - -------- -- - ------ ----- ---- ----- -- - ----- --- - ------------- - --------------- -- -------- ------------------- ----- ------ -- - -- ------- - ---------------------------- ------- - ---- - ---------------- - --------- -------- - ---- -- - --------------------- --------- ---------------------- ----------------------- -- ------- - --- -- --
上述代码中,我们定义了一个 redisCache 对象作为缓存存储器,duration 表示缓存时间。在 cacheMiddleware 中,我们判断请求的 url 是否已经缓存,如果已经缓存则直接返回缓存数据,否则将数据保存到缓存中并设置缓存时间。
使用方法:
app.get("/api/data", cacheMiddleware(30), (req, res) => { setTimeout(() => { res.send({ name: "yideng" }); }, 1000); });
总结
本文介绍了缓存的作用及使用方式,并给出了两种在 Express.js 中实现缓存功能的方法。其中,基于内存的缓存适合小型项目或者数据量不大的接口;而基于 Redis 的缓存适合大型项目或数据量较大的接口。在实际应用中,需要根据具体情况选择合适的缓存方式,并结合 CDN、浏览器缓存等手段综合提升网站性能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c2fbf968c7c53b0b3942f