首页 web前端 js教程 5个简易性能调整node.js express

5个简易性能调整node.js express

Feb 19, 2025 am 09:06 AM

5 Easy Performance Tweaks for Node.js Express

关键要点

  • 切换到生产模式可显着提升 Express 应用性能,因为生产模式省去了开发模式中的日志记录和异常堆栈跟踪任务。
  • 在 Express 4.x 中启用 GZIP 压缩可以缩小 HTTP 负载,从而提高性能。这可以通过安装 compression 模块并将其作为第一个中间件函数来实现。
  • 删除不必要的中间件、考虑使用更简单的模板引擎以及有效缓存常用变量可以进一步优化 Express 应用的性能。可以使用 Gulp 等构建工具来压缩和合并 HTML 模板、CSS 和 JavaScript 文件,并且应限制会话变量的使用以避免内存相关的性能问题。

Node.js 彻底改变了 Web 开发,Express 框架功不可没。 Express 可能不是最快或最先进的服务器选项,但它几乎肯定是使用最广泛的,每月下载量超过 300 万次。如果您什么都不做,Node.js 和 Express 的运行速度也会非常快。但是,有一些简单的方法可以使 Express 4.x 运行得更快……

  1. 切换到生产模式

Express 可以运行在多种模式下。默认情况下,它假定为开发模式,该模式提供异常堆栈跟踪和其他日志记录任务。还有一个调试模式,它将消息记录到控制台,例如:

<code>DEBUG=express:* node ./app.js</code>
登录后复制
登录后复制

在您的实时服务器上,您可以通过切换到生产模式来显着提高性能。这可以通过将 NODE_ENV 环境变量设置为 production 来实现。可以在启动 Express 应用程序之前在 Windows 的当前会话中设置它:

<code>set NODE_ENV=production</code>
登录后复制
登录后复制

或 Mac/Linux:

<code>export NODE_ENV=production</code>
登录后复制
登录后复制

Linux 用户还可以在启动时在一行中设置 NODE_ENV:

<code>NODE_ENV=production node ./app.js</code>
登录后复制
登录后复制

理想情况下,您应该通过将 <code>export NODE_ENV=production</code> 添加到您的 ~/.bash_profile 或相应的启动脚本中来配置您的环境。

  1. 启用 GZIP

Express 4.x 提供了最少的可用功能,可以通过中间件来增强。一个不太明显的缺失功能是 GZIP 压缩,它可以缩小 HTTP 负载,以便浏览器在接收时可以对其进行扩展。要添加 GZIP,请使用 npm 安装 compression 模块:

<code>npm install compression --save</code>
登录后复制
登录后复制

(根据您的设置,您可能需要在 Mac/Linux 上使用 sudo——有很多方法可以解决这个问题。)在您的主要应用程序启动文件中,包含 compression 模块:

<code>var compression = require('compression');</code>
登录后复制

然后将其作为第一个中间件函数(在其他 Express .use 方法之前)安装:

<code>DEBUG=express:* node ./app.js</code>
登录后复制
登录后复制
  1. 删除不必要的中间件

如果您使用 Express Generator 或类似的过程生成了预构建的应用程序,请删除您未使用的任何中间件模块。例如,如果您不使用 cookie,您可以删除 cookie-parser 模块或使用 req.cookies 和 res.cookie 实现更简单的替代方案。在生产模式下,可以删除某些进程,例如调试输出,例如:

<code>set NODE_ENV=production</code>
登录后复制
登录后复制

也就是说,最好保留 serve-favicon。浏览器会频繁请求 favicon.ico 文件,并且该模块可以改进缓存。

  1. 考虑使用更简单的模板引擎

Jade 是许多 Express 安装的默认模板引擎,它是一个不错的选择。但是,如果您乐于编写自己的 HTML,并且只需要基本的插值和求值,请考虑使用轻量级的替代方案,例如 doT,它可以使用 express-dot-engine 模块作为 Express 中间件添加。或者,您可以绕过模板引擎以获得更简单的响应,例如:

<code>export NODE_ENV=production</code>
登录后复制
登录后复制

无论您使用哪个模板引擎,始终确保启用了视图缓存:

<code>NODE_ENV=production node ./app.js</code>
登录后复制
登录后复制
  1. 记住缓存!

与大多数基于服务器的应用程序不同,Node.js 应用程序永久运行。因此,您可以设置诸如数据库连接对象之类的常用变量一次,并在每个用户的每个请求期间重复使用它们。可以根据需要扩展此概念。一般来说,您可以缓存的常用项目越多,性能就越好。例如,假设您的基于 Express 的 CMS 应用程序在主页上显示了您最近五篇文章的链接。该列表可以生成并存储在一个变量中,并且仅在发布新文章时更新。

额外快速提示

想要更多?…

  • 考虑使用 nginx 来提供静态内容,并减轻 Node.js 和 Express 的负载。
  • 使用 Gulp 等构建工具来压缩和合并您的 HTML 模板、CSS 和 JavaScript 文件。
  • 限制会话变量的使用。用户会话数据通常存储在内存中,随着使用量的增长,这可能会导致性能问题。考虑只使用 ID,然后在请求期间从数据库中获取用户信息。
  • 将最大 HTTP 套接字数从五个增加到更高的数字,例如:
<code>npm install compression --save</code>
登录后复制
登录后复制
  • 在可能的情况下,并行调用阻塞操作序列,而不是按顺序调用。
  • 避免在除应用程序初始化之外的所有内容中使用同步阻塞调用。
  • 始终注意,为一个用户运行的代码会阻塞为其他每个用户运行的代码。

您是否有其他关于 Node.js 或 Express 的性能提示?我很乐意在评论中听到它们。

(此处应添加关于 Node.js 性能调整的常见问题的章节,内容与输入文本中提供的相同)

以上是5个简易性能调整node.js express的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

JavaScript难以学习吗? JavaScript难以学习吗? Apr 03, 2025 am 12:20 AM

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

console.log输出结果差异:两次调用为何不同? console.log输出结果差异:两次调用为何不同? Apr 04, 2025 pm 05:12 PM

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...

See all articles