位置: 编程技术 - 正文

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

编辑:rootadmin

推荐整理分享你所未知的3种Node.js代码优化方式(所有的未知),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:所未知的前面一个字,你所不知道的,所有的未知,未知所是什么意思,你所未知的那一日,什么所未知,你所未知的世界,什么所未知,内容如对您有帮助,希望把文章链接给更多的朋友!

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、

2、使用 V8 分析器另一个选项是直接使用 V8 分析器。这种方式会与程序共享进程,因此它会影响程序性能。基于这个原因,请只在你遇到此类问题时运行 V8 分析器来捕获相关输出。该方法的好处是:你可以使用 Chrome 的所有分析工具,结合其输出结果(包括火焰图),对程序进行调查。

请运行以下代码来测试你的程序:

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

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

只要你发送 SIGUSR2 信号到此进程,它就会开始分析。再次发送一个 SIGUSR2 信号可以停止分析(代码如下)。

该进程的分析结果将被写入到当前工作路径的文件中(请确保该路径可被写入)。由于这是一个可编程接口,你可以随意触发它(使用 web endpoint,IPC,等等)。如果你对程序在何时变得缓慢有预感,你可以在任一时期触发该接口。建立自动触发对避免持续监看程序是非常有用的,但是它要求你对捕获时间以及捕获时长有预测性认知。

一旦已经收集好配置文件数据,将它加载到Chrome开发工具中,开始分析吧!

3、使用进程管理器尽管直接使用 V8 分析器是非常有效且可定制的,但是它会进入你的代码库,并且会向项目添加又一项你可能不想要的依赖性条件。一种替代方式就是使用进程管理器,它可以在你需要分析时,用各种工具将你的程序包装起来。一种可选的工具是来自 StrongLoop 的 SLC 命令行工具。

首先,运行npm install strongloop ?g,然后运行以下代码:

上述代码会在进程管理器中启动你的程序,你可以按需提取 CPU 分析数据。要想验证并获取应用程序 id,请运行:

你将得到与下面类似的运行结果:

定位应用的进程 id。在此例中,id 为1.1.。现在我们就能在任意时间开始分析了,运行如下代码即可:

当我们觉得已经捕获到了迟滞行为,就可以运行以下代码来停止分析器:

以下代码将写文件至硬盘:

好啦,就是这样。你可以像在 V8 分析器里那样把文件加载到 Chrome 里面进一步分析。

作出正确决定在本文中,笔者展示了三种在 Node 中捕获生产环境下 CPU 使用量的方式。那么,你应该选用哪一种呢?下面是一些帮助你缩小决策范围的想法:

我需要分析很长一段时间:使用内核级工具。 我想用 Chrome 开发工具:使用 V8 分析器或者过程管理器。 我想捕获应用中的特定行为:使用 V8 分析器。 我不想影响到程序性能:使用内核级程序 我希望我不用挨个测试文件来获取程序分析信息:使用过程管理器

标签: 所有的未知

本文链接地址:https://www.jiuchutong.com/biancheng/370678.html 转载请保留说明!

上一篇:nodejs 中模拟实现 emmiter 自定义事件(nodejs模拟点击)

下一篇:Node.js编写组件的三种实现方式(node. js教程)

  • 以公允价值计量计入其他综合收益
  • 无形资产的确认条件
  • 税务局如何认定虚开
  • 营业额和营业收入区别举例
  • 收不回的款项怎么处理
  • 服装公司的吊牌是什么
  • 自然人纳税人识别号查询
  • 长期借款账务处理会计分录例题
  • 二手商品没有发票
  • 安置残疾人就业税收优惠政策
  • 并购重组资产怎么算
  • 小规模纳税人取得的专票转为一般纳税人之后能抵扣吗
  • 退预收账款需要什么原始凭证
  • 企业收到免税发票后怎么开票
  • 支付技术转让费能加计扣除
  • 材料采购定期结算表
  • 预收货款属于资金投入吗
  • 出口退税销项税额计算公式
  • 公司一般户走账要交税吗
  • 工商年报单位缴费基数从哪看
  • 幼儿园是否缴纳残疾人保障金
  • 报个税失业保险怎么填
  • 根据规定签发汇票凭证必须记载的事项有
  • 小规模固定资产一次性扣除
  • 个税申报系统的备份保留几份数据
  • 餐费没有发票怎么入账
  • 外贸出口企业的租金能退税吗
  • 收回已核销的坏账并入账
  • win10系统更新出现错误代码
  • 费用发票可以抵扣吗
  • 修改php.ini
  • 非一般纳税人可以抵扣吗
  • 如何安装纯净win10
  • PHP:pg_prepare()的用法_PostgreSQL函数
  • 半月湾在哪
  • PHP:imagestringup()的用法_GD库图像处理函数
  • 在建工程的核算内容和范围是什么
  • 应交税费为负数什么原因
  • 待摊费用和预提费用改为什么科目了
  • phpseclib
  • 盈余公积提取和结转
  • 建筑企业结转成本的依据是什么
  • 使用筷子就餐会不会传染乙肝病毒
  • php从服务器下载文件
  • 怎么保证发票是真的
  • 应该如何打造自己
  • 资产负债表与利润表之间的关系
  • 研发费用加计扣除新税收政策
  • 结转本期损益怎么看亏损
  • 数据结构—python语言描述
  • mongodb的使用教程
  • 小规模纳税人通行费可以抵扣吗
  • 没有原始凭证可以记账吗
  • Windows下Postgresql数据库的下载与配置方法
  • 库存现金余额过大的风险
  • 开票收入摘要怎么写
  • 财政补助结转余额在借方还是贷方
  • 未确认融资费用摊销额怎么计算
  • 股权变更需要多久
  • 企业成立第二年有补贴吗
  • Linux下mysql5.6.33安装配置教程
  • macmysql忘记密码如何配置
  • 如何最简单的
  • win10系统任务栏卡顿
  • win8.1无法安装
  • Win7计算机管理里面没有本地用户和组
  • xp系统如何设置
  • win10引导记录损坏修复方法详解
  • win7旗舰版u盘在电脑上读不出来
  • shell命令tee
  • vue组件的使用步骤
  • python 详细
  • python汉字字符
  • 创建shell脚本命令
  • unity怎么做触屏按键
  • javascript获取html元素的方法
  • javascript中的函数
  • css伸缩弹动特效
  • 密云到顺义区医院公交路线
  • 内蒙古税务总局网站官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设