在 Express.js 中实现缓存功能

在 web 应用中,缓存机制是提升网站性能的重要手段之一。Express.js 是 Node.js 中最流行的 web 框架之一,本文将介绍如何在 Express.js 中实现缓存功能。

为什么需要缓存

在 web 应用中,缓存机制可以减少网络流量,加快页面加载速度,降低服务器负载。缓存机制可以将经常访问的页面、图片、脚本等数据保存到客户端或服务器的内存中,在下次请求时直接从缓存中获取,避免重复查询或加载数据。

使用缓存的方式

使用缓存的方式分为两种:客户端缓存和服务器端缓存。

客户端缓存

客户端缓存是将一些静态资源(例如:图片、脚本、样式等)保存到客户端浏览器中,客户端浏览器无需再次请求该资源,直接从本地缓存读取即可。这种缓存方式一般使用 HTTP 头信息中的 expires 和 cache-control 字段进行设置。

expires 字段可以设置缓存过期时间,例如:

-------------- ------------

cache-control 字段可以设置缓存控制方式,例如:

-------- ---- -- --- ---- -------- ---

服务器端缓存

服务器端缓存是将一些动态生成的数据(例如:页面、接口数据等)保存到服务器的内存或硬盘中,下次请求时可以直接从缓存中获取。这种缓存方式可以使用诸如 Redis、Memcached 等缓存存储系统来实现,也可以在应用代码中自行实现。

在 Express.js 中可以通过添加中间件来实现缓存功能。下面详细介绍两种常用的缓存方式:基于内存的缓存和基于 Redis 的缓存。

基于内存的缓存

基于内存的缓存是将动态生成的页面或接口数据保存在服务器内存中,下次访问时直接从内存中读取数据,避免重复查询或处理数据。

----- ----------- - --- --------------

----- --------------- - -------- -- -
  ------ ----- ---- ----- -- -
    ----- --- - ------------- - --------------- -- --------
    ----- ------------ - ---------------------
    -- -------------- -
      -----------------------
      -------
    - ---- -
      ---------------- - ---------
      -------- - ---- -- -
        -------------------- ----- -------- - ------
        -----------------------
      --
      -------
    -
  --
--

上述代码中,我们定义了一个 memoryCache 对象作为缓存存储器,duration 表示缓存时间。在 cacheMiddleware 中,我们判断请求的 url 是否已经缓存,如果已经缓存则直接返回缓存数据,否则将数据保存到缓存中并设置缓存时间。

使用方法:

-------------------- -------------------- ----- ---- -- -
  ------------- -- -
    ---------- ----- -------- ---
  -- ------
---

基于 Redis 的缓存

基于 Redis 的缓存可以将动态生成的数据保存到缓存中,并设置缓存时间。下次请求时直接从缓存中读取数据,避免重复查询或处理数据。

----- ---------- - ---------------------

----- --------------- - -------- -- -
  ------ ----- ---- ----- -- -
    ----- --- - ------------- - --------------- -- --------
    ------------------- ----- ------ -- -
      -- ------- -
        ----------------------------
        -------
      - ---- -
        ---------------- - ---------
        -------- - ---- -- -
          --------------------- --------- ----------------------
          -----------------------
        --
        -------
      -
    ---
  --
--

上述代码中,我们定义了一个 redisCache 对象作为缓存存储器,duration 表示缓存时间。在 cacheMiddleware 中,我们判断请求的 url 是否已经缓存,如果已经缓存则直接返回缓存数据,否则将数据保存到缓存中并设置缓存时间。

使用方法:

-------------------- -------------------- ----- ---- -- -
  ------------- -- -
    ---------- ----- -------- ---
  -- ------
---

总结

本文介绍了缓存的作用及使用方式,并给出了两种在 Express.js 中实现缓存功能的方法。其中,基于内存的缓存适合小型项目或者数据量不大的接口;而基于 Redis 的缓存适合大型项目或数据量较大的接口。在实际应用中,需要根据具体情况选择合适的缓存方式,并结合 CDN、浏览器缓存等手段综合提升网站性能。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/646c2fbf968c7c53b0b3942f


猜你喜欢

  • 如何使用 Chai 和 Sinon.js 进行 Mock 和 Stub 测试

    在前端开发中,测试是非常重要的环节之一,而 Mock 和 Stub 测试则是其中比较常用的一种测试方式。在这篇文章中,我们将介绍如何使用 Chai 和 Sinon.js 进行 Mock 和 Stub ...

    1 年前
  • ES9 中如何使用正则表达式的 dotAll 模式匹配任何字符

    在 ES9 中,正则表达式新增了一个特殊的标志:s,它开启了 dotAll 模式。在 dotAll 模式下,点号 . 可以匹配任何字符,包括换行符 \n。 dotAll 模式的语法 在正则表达式中,我...

    1 年前
  • Socket.IO 连接时如何将自定义参数传递给服务器

    在前端开发中,Socket.IO 是一种流行的库,用于在客户端和服务器之间建立实时双向通信。在 Socket.IO 连接时,有时需要传递一些自定义参数给服务器,这些参数可能包含用户身份信息、房间号等等...

    1 年前
  • 如何在 Vue 中使用 LESS 预处理器?

    前端开发中样式的管理一直是一个重要的问题,随着 Web 应用的复杂度不断提高,大量样式的管理变得十分复杂和困难,而 LESS 预处理器的出现,则帮助解决了此类问题。

    1 年前
  • Webpack 如何实现 Dev 环境和 Prod 环境的配置切换?

    Webpack 是一个广泛使用的前端构建工具,它提供了许多功能,包括模块化管理,打包优化等。在使用 Webpack 进行项目开发时,我们需要针对不同的开发环境进行不同的配置,通常分为开发环境(Dev)...

    1 年前
  • RESTful API 中如何实现泛型数据转换

    在 RESTful API 开发中,数据转换是一个常见的问题。在实际开发中,我们可能会遇到需要将多个不同的数据模型转换成一个泛型数据模型的情况,例如将多个不同的订单模型转换成同一个订单视图模型。

    1 年前
  • 使用 Fastify 构建 API 网关详解

    API 网关是现代应用程序中的必备组件,用于将前端和后端之间的交互抽象出来,并提供了很多有用的特性,如路由、负载平衡、JWT 签名等。Fastify 是一个快速、低开销、真正的轻量级开源框架,它是构建...

    1 年前
  • Flexbox 布局在 Web 前端开发中的应用

    前言 在 Web 前端开发中,布局一直是个麻烦的问题。不论是传统的 float 布局、position 布局,还是 CSS Grid 布局,都难以满足各种场景的需求。

    1 年前
  • Kubernetes Dashboard: 仪表盘操作指南

    Kubernetes Dashboard 是 Kubernetes 官方提供的 Web UI,它为用户提供了许多方便易用的仪表盘操作,可以帮助我们更加高效地管理和操作 Kubernetes 集群。

    1 年前
  • PWA 技术:如何实现多语言支持

    随着移动端应用的不断发展,越来越多的网站也开始转向 PWA(Progressive Web Apps)技术,将其改造成支持离线访问、更快的加载速度、更好的用户体验等特性的 Web 应用程序。

    1 年前
  • Vue 实现平滑滚动条滚到锚点位置

    在 Web 开发中经常会遇到需要将页面滚动条平滑、自然地滚动到某个固定位置的需求,这种需求一般用于单页应用中的锚点导航、跳转到内部链接等场景,提升了用户体验和页面交互性。

    1 年前
  • TypeScript 中的类的访问修饰符

    TypeScript 中的类的访问修饰符 在 TypeScript 中,类是一个非常常见的特性,它可以把一些相关的属性和方法组织起来,以便程序员能够更好地结构化代码和管理代码的复杂性。

    1 年前
  • 基于 RabbitMQ 的性能优化方法

    前言 随着互联网技术的不断发展,消息中间件已经成为了很多企业必不可少的一部分。而 RabbitMQ 作为一个高可靠、高可用、可扩展的中间件,也越来越受到人们的关注。

    1 年前
  • Redis 数据合并及数据合并前的准备工作

    前言 在前端应用中,数据合并是一个比较常见且具有挑战性的问题。而 Redis 作为一个内存数据库,能够很好地解决这个问题。本文就来介绍一下 Redis 中如何实现数据合并,并分享一些实践经验。

    1 年前
  • 在 Deno 中使用 CI/CD 来构建和部署应用

    介绍 Deno 是一个新兴的 JavaScript 运行时环境,它由 Node.js 的创始人 Ryan Dahl 开发,旨在成为一个安全、现代和更加简洁的运行时环境。

    1 年前
  • React 项目中如何实现数据的缓存处理

    随着 JavaScript 开发技术的不断更新,前端应用的复杂性也不断增加。在现代的前端应用中,数据缓存非常重要,能够让页面更快地响应用户的操作并减轻服务器的负担。

    1 年前
  • GraphQL 的实现原理和技术架构

    前言 随着互联网应用的不断发展,前端开发逐渐成为了应用开发的重要组成部分。而在前后端分离架构中,一个好的数据传输方式非常重要。GraphQL 可以说是一个较为优秀的数据传输方式,能够极大地提升开发效率...

    1 年前
  • Reset CSS 的 bug

    在前端开发中,我们经常会使用 Reset CSS 来重置基础 CSS 样式,以保证不同浏览器的默认样式表现尽量一致。然而,在实际开发中,我们可能会发现 Reset CSS 存在一些 bug,这些 bu...

    1 年前
  • ES11 之 BigInt

    ES11 之 BigInt ES11 在 ECMAScript 的开发历程中作为最新的更新,新增了许多实用的功能。其中之一的 BigInt 数据类型就是这次更新的一大亮点。

    1 年前
  • 使用 Koa2 和 Elasticsearch 实现博客全文检索

    前言 在现今信息爆炸的社会中,我们时常需要查找一些特定的资料。在传统的博客网站中,虽然通过分类、标签等方式可以方便地查找某些文章,但是当我们需要通过文章中一些关键字来查找相关的文章时,就需要借助到全文...

    1 年前

相关推荐

    暂无文章