一份Node.js性能优化技巧指南

这篇具有很好参考价值的文章主要介绍了一份Node.js性能优化技巧指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

node性能如何进行监控以及优化?,node.js,性能优化,javascript,前端

你是一个踏入后端开发领域的前端爱好者吗?🤔 准备好迎接在Node.js错综复杂的景观中惊险刺激的旅程吧!🎢

在这个探险中,我们将探索后端的无数奇迹,从使用Node.js框架快速创建自己的后端,到应对性能分析、测试,深入内存管理。💻🔍

加入我们,揭开C++插件的奥秘,征服子进程,掌握多线程艺术,利用Cluster模块的力量,以及平滑管理进程守护进程。 🚀💡

是时候提升你的Node.js技能并征服后端宇宙了!🌌 你准备好迎接这个挑战了吗?让我们开始吧!🚀👩‍💻👨‍💻

使用Express构建你的第一个HTTP服务器

好的,系紧安全带,开始一个令人兴奋的旅程,进入构建基本服务的世界!🎢💻 为了开始,我们卷起袖子使用Express实现一个简单的HTTP服务器。🚀🚂

const fs = require('fs')
const express = require('express')
const app = express()

app.get('/', (req, res) => {
  res.end('hello world') 
})

app.get('/index', (req, res) => {
  const file = fs.readFileSync(__dirname + '/index.html', 'utf-8')
  /* 返回缓冲 */
  res.end(file)
  /* 返回流 */ 
  // fs.createReadStream(__dirname + '/index.html').pipe(res)  
})

app.listen(3000)

通常,我们的后端服务共同返回一系列接口信息。但是,为了进行某些后续测试,我们选择返回一个文件。这种选择使我们可以更直观地评估我们的服务性能并识别潜在的瓶颈,特别是在更大的数据集上。

📄 此外,在注释流中,你可以观察到我们也使用一种形式来返回信息。在返回文件时,初始的同步读取过程往往比较耗时。对于更大的文件,整个内容被存储在内存中,然后一次性返回。当涉及到内存使用时,此性能问题尤其明显。

性能测试和压力测试

为了评估我们的系统在高并发下的健壮性,我们将利用专门用于压力测试的测试工具。我推荐考虑两种可靠的工具:

  1. ab (Apache Benchmark)
  2. webbench
  3. autocannon

为了我们的目的,让我们关注 ab 进行下一步操作。Apache Benchmark,即 ab,是一个来自 Apache 软件基金会的工具。如果你使用的是 macOS,那么你很幸运,因为这个工具已经包含在内。 对于其他系统,你可以在网上找到安装教程。

⚠️ 请记住,macOS 自带的 ab 工具具有并发性限制。

现在,让我们深入一个简单的命令并分解关键参数:

ab -n <total_requests> -c <concurrent_requests> <url>
  • -n:在测试期间执行的请求总数。
  • -c: 一次要执行的多个请求数。

例子:

ab -n 1000 -c 10 http://your-api-endpoint

此命令启动一个压力测试,总共1000个请求,同时模拟10个并发请求。

Node.js性能分析工具

profile

Node.js内置了一个强大的分析工具。要使用它,只需在启动Node.js应用程序时添加 — prof :

node - prof index.js 

启动服务器后,名为 isolate-0x104a0a000–25750-v8.log 的文件会立即在目录中生成。最初,你可以忽略该文件。 现在,让我们进行为期15秒的压力测试:

ab -c 50 -t 15 http://127.0.0.1:3000/index

完成压力测试后,我们的日志文件将发生更改。但是,里面的数据非常庞大,需要解析。

为了使数据更易访问,我们可以使用 Node.js自带的以下命令:

node - prof-process isolate-0x104a0a000–25750-v8.log > profile.txt

此命令将生成的日志文件转换为更可读的 txt 格式,并存储在当前目录中。尽管这种文本格式更直观,但它可能仍然有点不方便。 内容包括调用次数、占用的时间、JavaScript、C++ 的各种调用栈信息、垃圾回收等。你可以手动探索详细信息。

如果文本格式不符合你的需求,还有另一种更方便的分析方法!📊

Chrome DevTools

鉴于 Node.js 是由 Chrome V8 引擎提供动力的,我们可以有效地利用 Chrome DevTools 来调试 Node.js。 要启动调试并同时暂停程序,我们将使用新的参数 — inspect-brk:

node - inspect-brk index.js

运行此命令后,你会看到一条消息,指示调试器正在侦听 WebSocket,比如 ws://127.0.0.1:9229/e9f0d9b5-cdfd-45f1–9d0e-d77dfbf6e765

对于调试,打开 Chrome 浏览器,在地址栏中导航至 chrome://inspect

🔍 在这里,你会发现可用于检查的可用目标列表。 找到你的 Node.js 应用程序,点击 “inspect,”,瞧! 你现在可以使用强大的 Chrome DevTools 来调试 Node.js 应用程序了。

欲了解更多指南,你可以参考官方 Node.js 文档:Node.js Inspector。

代码性能优化

在分析性能瓶颈后,很明显文件读取操作readFileSync消耗了最多的时间。进一步检查原始代码发现,每次访问 /index 路径都会触发对文件的再次读取。这成为一个明确的优化机会。

让我们做一个小的修改来提高性能:

const fs = require('fs')
const express = require('express')
const app = express()
app.get('/', (req, res) => {
   res.end('hello world')
}) 
/* 当提取到外部时,每个程序只会读取它一次来提高性能 */
const file = fs.readFileSync(__dirname + '/index.html', 'utf-8')  
app.get('/index', (req, res) => {
   /* 返回缓冲 */
   res.end(file)
   /* 返回流 */
   // fs.createReadStream(__dirname + '/index.html').pipe(res) 
})
app.listen(3000)

在我们的变革性分析和压力测试之后,结果证明——通过采用异步操作优化文件读取可以使你的QPS (每秒查询数)翻一番。这种简单的代码修改证明了高效的编码实践的重要影响。
node性能如何进行监控以及优化?,node.js,性能优化,javascript,前端文章来源地址https://www.toymoban.com/news/detail-833087.html

到了这里,关于一份Node.js性能优化技巧指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 完整指南:如何使用 Node.js 复制文件

    文件拷贝指的是将一个文件的数据复制到另一个文件中,使目标文件与源文件内容一致。 Node.js  提供了文件系统模块 fs,通过该模块可以访问文件系统,实现文件操作,包括拷贝文件。 在 Node.js 中,有几种常用的方法可以用来实现文件拷贝: 1.使用 fs.copyFile()  Node.js v8.5.

    2024年02月07日
    浏览(49)
  • 如何在shell脚本将node_modules里的文件复制一份到public文件里

    项目背景:由于公司网络不连接公网,所以在绘制地图大屏项目时,需要我们将边界线数据包也部署起来,来获取边界线数据 解决方案: 1.让后端写个接口或者找个地方将数据包放到服务器即可 2.将数据包放到vue项目的public文件里,这样同样可以通过axios.get(\\\'/abc/def.json\\\'),这种

    2024年02月14日
    浏览(67)
  • 优化 RDMA 代码的建议和技巧-rdma性能优化技巧-避坑指南

    DMA 代表直接内存访问。这意味着应用程序可以在 CPU 干预的情况下直接访问(读/写)主机内存。如果您在主机之间执行此操作,它将成为远程直接内存访问 (RDMA) 在阅读有关 RDMA 的内容时,您会注意到一些用于描述其优点的术语。 “零复制 Zero Copy”、“内核绕过 Kernel Bypas

    2024年02月03日
    浏览(54)
  • Node.js Shell 脚本开发指南(下)

    原文: exploringjs.com/nodejs-shell-scripting/ch_creating-shell-scripts.html 译者:飞龙 协议:CC BY-NC-SA 4.0 14.1 所需的知识 14.1.1 本章的下一步是什么 14.2 Node.js ESM 模块作为 Unix 上独立的 shell 脚本 14.2.1 Unix 上的 Node.js shell 脚本 14.2.2 Unix 上的 Hashbangs 14.2.3 在 Unix 上使文件可执行 14.2.4 直接运行

    2024年01月23日
    浏览(48)
  • Node.js Shell 脚本开发指南(中)

    原文: exploringjs.com/nodejs-shell-scripting/ch_nodejs-streams.html 译者:飞龙 协议:CC BY-NC-SA 4.0 9.1 总结:异步迭代和异步生成器 9.2 流 9.2.1 管道 9.2.2 文本编码 9.2.3 辅助函数: readableToString() 9.2.4 一些初步说明 9.3 可读流 9.3.1 创建可读流 9.3.2 通过 for-await-of 从可读流中读取

    2024年01月24日
    浏览(62)
  • php的性能要比node.js高很多吗?

    在当今的编程世界中,PHP和Node.js是两种广泛使用的服务器端编程语言。虽然它们都用于构建高效的网络应用程序,但关于它们性能的争论一直存在。有些人认为PHP的性能要比Node.js高很多,而另一些人则持相反意见。 性能通常指的是计算机程序或系统在特定任务上执行的速度

    2024年01月23日
    浏览(75)
  • 使用 Node.js 生成优化的图像格式

    图像是任何 Web 应用程序的重要组成部分,但如果优化不当,它们也可能成为性能问题的主要根源。在本文中,我们将介绍如何使用 Node.js 自动生成优化的图像格式,并以最适合用户浏览器的格式显示它们。 首先我们需要一个为我们处理图像处理的库,而Sharp就是本文将使用

    2024年02月12日
    浏览(39)
  • 【Node.js】path 模块进行路径处理

    Node.js 执行 JS 代码时,代码中的路径都是以终端所在文件夹出发查找相对路径,而不是以我们认为的从代码本身出发,会遇到问题,所以在 Node.js 要执行的代码中,访问其他文件,建议使用绝对路径 实例: 问题原因:就是从代码文件夹出发,使用 ../text.txt 解析路径,找不到

    2024年02月20日
    浏览(54)
  • Node.js 版本管理工具 n 使用指南

    Node.js 版本更新很快,目前 node v20.x 已经发布,我们在使用时避免不了会需要切换不同的 Node.js 的版本来使用不同版本的特性。 所以就出现了像 windows 上的 nvm ,MacOS 上的 n 工具,本文就介绍一下如何使用 n 管理 Node.js 的版本。 使用 Brew 安装时,未安装可以参考 Brew 官网安装

    2024年02月16日
    浏览(55)
  • 简单易懂的 nvm 和 Node.js 版本控制指南

    NVM是Node.js的版本管理工具,可以方便地在不同版本的Node.js之间切换。它可以通过命令行或者脚本来管理Node.js的版本,支持在同一台机器上安装多个版本的Node.js,并能够方便地切换它们。 NVM的主要功能包括: 安装和卸载Node.js的不同版本。 切换不同版本的Node.js。 管理全局和

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包