缓存是一项用于提高网站性能的技术。它是将数据存储在本地存储器中,从而避免在每次请求时都要重新获取数据。在前端开发中,使用缓存可以大大减少数据传输的时间,提高网站的加载速度和响应时间。在使用 Express.js 进行后端开发时,缓存也是非常重要的一项技术。本文将重点介绍如何在 Express.js 中使用 Etags 和 Last-Modified 来实现缓存。
Etags 与 Last-Modified 概述
ETag 是一个由服务器生成的标识,用来标识一个资源的版本信息。它是一个字符串,可以通过浏览器的 HTTP 头信息来传递给服务器。当服务器接收到一个请求时,它会将服务器上的资源与传递过来的 ETag 值进行比较,如果 ETag 值相同,则服务器返回 HTTP 304 Not Modified 响应,从而让浏览器使用缓存中的数据。
Last-Modified 是一个时间戳,用来标识一个资源的最后修改日期。它也可以通过浏览器的 HTTP 头信息来传递给服务器。当服务器接收到一个请求时,它会将服务器上的资源的最后修改日期与传递过来的 Last-Modified 值进行比较,如果它们相同,则服务器返回 HTTP 304 Not Modified 响应。
Etags 的使用
为了在 Express.js 中使用 Etags,我们需要使用 etag 中间件。这是一个 Express.js 的内置中间件,可以用于自动生成 Etag 值,并将其添加到响应的 HTTP 头信息中。
----- ------- - ------------------- ----- ---- - ---------------- -- -- ---- --- ----- --- - ---------- ------------ -------- ----- ---- - ----- ---- - ------ ------- ----- --------- - ----------- -- -- ---- - --------------- ----------- -- --------- ---- --------------- --- ---------------- -------- -- - ---------------- -- ------- -- ---- ------- ---
在以上代码中,我们通过 etag 中间件生成了 Etag 值,并将其添加到了响应头信息中。当浏览器向服务器请求时,服务器会将客户端传递过来的 Etag 值与服务器上的 Etag 值进行比较。如果它们相同,则服务器返回 HTTP 304 Not Modified 响应,并告诉浏览器直接从缓存中获取数据。
Last-Modified 的使用
在 Express.js 中使用 Last-Modified 也非常简单。我们只需要在响应头信息中添加 Last-Modified 值即可。下面是一个示例代码:
----- ------- - ------------------- ----- ------ - ------------------ -- -- ------ --- ----- --- - ---------- ------------ -------- ----- ---- - ----- ---- - ------ ------- ----- ------------ - ----------------------- -- ------- ------------------------ -------------- -- --------- ------------- --------------- --- ---------------- -------- -- - ---------------- -- ------- -- ---- ------- ---
在以上代码中,我们使用了 moment 时间库来生成当前时间戳,并将其添加到响应头信息的 Last-Modified 字段中。当浏览器向服务器请求时,服务器会将客户端传递过来的 Last-Modified 值与服务器上的 Last-Modified 值进行比较。如果它们相同,则服务器返回 HTTP 304 Not Modified 响应,并告诉浏览器直接从缓存中获取数据。
结论
在本文中,我们介绍了在 Express.js 中使用 Etags 和 Last-Modified 来实现缓存的方法。这些技术可以大大提高网站的性能,减少数据的传输时间,提高网站的加载速度和响应时间。如果您正在开发一个需要高性能的 Express.js 应用程序,那么使用这些技术是非常重要的。希望本文对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671aef4c9babaf620fa696fc