日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

你所未知的3种 Node.js 代码优化方式

發布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你所未知的3种 Node.js 代码优化方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from:https://cnodejs.org/topic/56cc2fd6c045c3743304bec6

?

Node.js 程序的運行可能會受 CPU 或輸入輸出操作的限制而十分緩慢。從 CPU 角度看,程序運行緩慢的典型原因之一就是未經優化的「熱點路徑」(一段經常被訪問的代碼)。從輸入輸出角度看,程序運行速度的局限可能是受底層操作系統影響,也可能是出于 Node 本身的故障。更或者,一個運行緩慢的程序可能跟 Node 本身沒有任何關系,問題在于外部資源,比如數據庫查詢或是 API 調用緩慢,未經過優化處理。

在本文中,我們將重點識別并優化代碼庫中會導致 CPU 繁重運行的操作。同時,將探討生產應用的配置文件,分析并作出可提高運作效率的改動。

由于 Node 的單線程性質,避免繁重的 CPU 負載對服務器來說尤為重要。因為在 CPU 上消耗的時間會占用響應其他請求的時間。如果你注意到自己的應用響應速度緩慢,而且 CPU 在這個過程中始終占用率較高,分析你的程序有助于找出瓶頸,并且使程序恢復快速運行的狀態。

##分析應用

復制生產環境中出現的緩慢程序問題非常難解決,而且十分耗時。值得慶幸的是,你不需要親自做這些了。你可以在生產服務器上收集配置文件數據,然后離線分析。下面讓我們來看一下幾種分析方法。

##1、使用內核級工具

首先,你可以使用內核級工具,比如 DTrace(Solaris, BSD),perf(Linux),或者 XPerf(Windows),從運行的進程中收集堆棧跟蹤信息,然后生成火焰圖。內核級分析對運行中的進程影響最小。火焰圖是根據調用棧生成的支持放大縮小查看的向量圖形。來自 Netflix 公司的 Yunong Xiao 針對 Linux 系統中 perf,發表過超贊的演講和推文,幫助你加深對該技術的了解。如果你想在生產程序中保持高吞吐量,可以參考使用這種方法。

###2、使用 V8 分析器

另一個選項是直接使用 V8 分析器。這種方式會與程序共享進程,因此它會影響程序性能。基于這個原因,請只在你遇到此類問題時運行 V8 分析器來捕獲相關輸出。該方法的好處是:你可以使用 Chrome 的所有分析工具,結合其輸出結果(包括火焰圖),對程序進行調查。

請運行以下代碼來測試你的程序:

npm install v8-profiler --save

之后,在你的程序中添加以下代碼:

const profiler = require('v8-profiler') const fs = require('fs') var profilerRunning = false function toggleProfiling () { if (profilerRunning) { const profile = profiler.stopProfiling() console.log('stopped profiling') profile.export() .pipe(fs.createWriteStream('./myapp-'+Date.now()+'.cpuprofile')) .once('error', profiler.deleteAllProfiles) .once('finish', profiler.deleteAllProfiles) profilerRunning = false return } profiler.startProfiling() profilerRunning = true console.log('started profiling') } process.on('SIGUSR2', toggleProfiling)

只要你發送 SIGUSR2 信號到此進程,它就會開始分析。再次發送一個 SIGUSR2 信號可以停止分析(代碼如下)。

kill -SIGUSR2 [pid]

該進程的分析結果將被寫入到當前工作路徑的文件中(請確保該路徑可被寫入)。由于這是一個可編程接口,你可以隨意觸發它(使用 web endpoint,IPC,等等)。如果你對程序在何時變得緩慢有預感,你可以在任一時期觸發該接口。建立自動觸發對避免持續監看程序是非常有用的,但是它要求你對捕獲時間以及捕獲時長有預測性認知。

一旦已經收集好配置文件數據,將它加載到Chrome開發工具中,開始分析吧!

##3、使用進程管理器

盡管直接使用 V8 分析器是非常有效且可定制的,但是它會進入你的代碼庫,并且會向項目添加又一項你可能不想要的依賴性條件。一種替代方式就是使用進程管理器,它可以在你需要分析時,用各種工具將你的程序包裝起來。一種可選的工具是來自 StrongLoop 的 SLC 命令行工具。

首先,運行npm install strongloop –g,然后運行以下代碼:

slc start [/path/to/app]

上述代碼會在進程管理器中啟動你的程序,你可以按需提取 CPU 分析數據。要想驗證并獲取應用程序 id,請運行:

slc ctl

你將得到與下面類似的運行結果:

Service ID: 1 Service Name: my-sluggish-app Environment variables: Name Value NODE_ENV production Instances: Version Agent version Debugger version Cluster size Driver metadata 5.0.1 2.0.2 1.0.0 1 N/A Processes: ID PID WID Listening Ports Tracking objects? CPU profiling? Tracing? Debugging? 1.1.61022 61022 0 1.1.61023 61023 1 0.0.0.0:3000

定位應用的進程 id。在此例中,id 為1.1.61023。現在我們就能在任意時間開始分析了,運行如下代碼即可:

slc ctl cpu-start 1.1.61023

當我們覺得已經捕獲到了遲滯行為,就可以運行以下代碼來停止分析器:

slc ctl cpu-stop 1.1.61023

以下代碼將寫文件至硬盤:

CPU profile written to `node.1.1.61023.cpuprofile`, load into Chrome Dev Tools

好啦,就是這樣。你可以像在 V8 分析器里那樣把文件加載到 Chrome 里面進一步分析。

##作出正確決定

在本文中,筆者展示了三種在 Node 中捕獲生產環境下 CPU 使用量的方式。那么,你應該選用哪一種呢?下面是一些幫助你縮小決策范圍的想法:

  • 我需要分析很長一段時間:使用內核級工具。
  • 我想用 Chrome 開發工具:使用 V8 分析器或者過程管理器。
  • 我想捕獲應用中的特定行為:使用 V8 分析器。
  • 我不想影響到程序性能:使用內核級程序
  • 我希望我不用挨個測試文件來獲取程序分析信息:使用過程管理器。
  • ?

    轉載于:https://www.cnblogs.com/94cool/p/5627654.html

    總結

    以上是生活随笔為你收集整理的你所未知的3种 Node.js 代码优化方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。