继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何在Express.js应用中优化中间件以适应生产环境?

慕桂英546537
关注TA
已关注
手记 343
粉丝 31
获赞 200

如何在Express.js应用中优化中间层处理以适应生产环境?

Express.js 是一个广受欢迎的 Node.js Web 应用程序框架,以其简洁性和灵活性而著称。中间件是 Express.js 的核心概念,它是由一系列处理请求和响应的函数组成的。虽然它对于任何 Express 应用都很重要,但如果未经过优化,它就可能在生产环境中变成瓶颈。

1. 了解中间件流程:

在优化之前,首先要理解中间件的工作流程至关重要。Express 按照代码中定义的顺序依次处理中间件。每个中间件都可以访问 reqresnext 对象,并可以:

  • 执行一些操作并调用 next() 继续处理下一个中间件;
  • 结束请求并发送响应,不再继续调用 next()

  • 做一个操作,然后通过调用 next() 传递控制。
  • 通过发送响应来结束请求的周期。
关键点:始终以逻辑方式组织中间件以避免不必要的处理步骤。
2. 减少中间件使用

并非所有的中间件都需要为每个路由执行。如果未适当限制范围,用于日志记录或解析等任务的全局性中间件可能会变得昂贵。相反,可以这样做:

  • 使用路由特定的中间件来执行特定任务。
  • 避免加载不需要的中间件包。
    // 特定路由的中间件示例
    app.get('/user/profile', authenticateUser, fetch UserProfile);
3. 利用自带的中间件

从 Express 4.x 版本起,像提供静态文件服务、解析 JSON 和处理 URL 编码的数据等任务都内置了中间件。使用这些内置中间件比使用第三方插件更快、更可靠。

    app.use(express.json()); // 内置的 JSON 解析器  
    app.use(express.urlencoded({ extended: true })); // 内置的 URL 编码形式的解析器,这行代码启用了 Express 的 URL 编码解析功能,允许更复杂的表单数据解析。
4. 优化一下第三方中间件

类似 cors, helmetmorgan 这样的中间件插件可以简化开发过程,但可能会引入开销。要优化它们的使用。

  • 小心配置以避免不必要的步骤。
  • 如果可以的话,尽量使用轻量级的替代方案。

例如,当你使用helmet来防护 HTTP 头部时,只开启必要的功能:

const helmet = require('helmet');  
app.use(helmet({  
  contentSecurityPolicy: false, // 禁用内容安全策略(如果不需要的话)  
}));
5. 控制生产环境中的日志

大量的日志记录可能会减缓请求处理的速度。在实际生产环境中,应该将类似 morgan 的工具配置为仅记录必需的信息。

    const morgan = require('morgan');  
    if (process.env.NODE_ENV === 'production') {  
      app.use(morgan('short')); // 使用简短的日志格式  
    }

将日志输出到文件或监控软件,以减少过多的控制台操作。

6. 压缩响应数据

请使用中间件如 compression 以启用响应压缩,确保其配置得当,以减少带宽和加快响应时间。

    const compression = require('compression');  
    app.use(compression({  
      level: 6, // 中等压缩程度,
    })); // 中等压缩程度表示适度的压缩级别
7. 优先考虑安全中间件

安全是生产中的首要考量。使用像 corshelmet 这样的中间件来保护,但需要配置它们以便在安全和性能之间找到平衡:

  • 通过 cors 限制允许的来源。
  • helmet 中启用特定的 headers。
    const cors = require('cors');  
    app.use(cors({  
      origin: 'https://example.com', // 仅限你的域  
    }));
8. 使用异步的中间件处理

进行 I/O 操作的中间件,例如数据库查询、API 调用等,应该使用异步模式。在类似 Node.js 的单线程环境中,阻塞操作会延迟其他请求的处理。

    app.use(async (req, res, next) => {  
      try {  
        const data = await fetchDataFromDatabase();  
        req.data = data;  
        next();  
      } catch (err) {  
        next(err);  
      }  
    });
9. 配置和监控的中间件环境

使用像 Express DebugPM2New Relic 这样的工具来识别中间件层中的瓶颈。这些工具可以帮助你了解请求-响应循环和中间件的执行时间。

示例:中间件

app.use((req, res, next) => {  
  console.time('请求耗时');  
  res.on('finish', () => {  
    console.timeEnd('请求耗时');  
  });  
  // 记录请求处理的耗时  
  next();  
});
10. 缓存成本高昂的运算.

通过使用像 apicache 这样的中间件或像 Redis 这样的工具来减少重复处理,缓存这些操作的结果。这对于那些经常访问的路由来说特别有用。

    const apicache = require('apicache');
    const cache = apicache.middleware;

    app.get('/api/data', cache('5 分钟'), fetchData); // 缓存 '/api/data' 接口的响应 5 分钟
  1. 使用一个生产就绪的环境设置

启用 Express.js 生产环境优化功能

  • NODE_ENV 设置为 production 模式。
  • 关闭 x-powered-by 头以避免泄露框架信息。
    app.disable('x-powered-by');  // 禁用应用程序的 "x-powered-by" 头信息
    process.env.NODE_ENV = 'production';  // 设置环境变量 NODE_ENV 为 'production',表示生产环境
  1. 要定期检查中间件

依赖关系会变化,曾经高效的中间件可能会不再适用。为此,定期审核你的中间件堆栈,以便:

  • 删除不再使用的中间件。
  • 替换过时的包。
  • 升级到最新的版本。

总结

在 Express.js 应用程序中优化中间件需要在功能、安全性和性能之间达到平衡。通过组织、配置和监控中间件,可以确保应用程序在生产环境里高效运行。定期进行审计并理解中间件流程将进一步提高其 Express.js 应用程序的可扩展性和可维护性。

你可能也可能会喜欢这样的:

你怎样优化网站性能?

2) 改变你的编程习惯,备战2025年的十个挑战

3) 高级JavaScript Promise面试问题 https://blog.arunangshudas.com/can-you-answer-this-senior-level-javascript-promise-interview-question/

4) 什么是数据库索引,以及为什么数据库索引很重要?

5) AI能否改变交易格局??

在下方评论里说一下您是怎样优化应用程序中的中间件的。

跟我在领英上保持联系,领英

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP