位置: 编程技术 - 正文

优化Node.js Web应用运行速度的10个技巧(node性能优化)

编辑:rootadmin

推荐整理分享优化Node.js Web应用运行速度的10个技巧(node性能优化),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node性能优化,要优化javascript,nodejs多核优化,js优化性能的方法,nodejs性能调优,要优化javascript,node性能优化,nodejs 性能优化,内容如对您有帮助,希望把文章链接给更多的朋友!

Node.js 受益于它的事件驱动和异步的特征,已经很快了。但是,在现代网络中只是快是不行的。如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异常的快。本文将介绍 条,经过检验得知可大大提高 Node 应用的技巧。废话不多说,让我们逐条来看看。

1. 并行

创建 Web 应用的时候,你可能要多次调用内部 API 来获取各种数据。比如说,假设在 Dashboard 页面上,你要执行下面这几个调用:

用户信息 -getUserProfile().

当前活动 -getRecentActivity().

订阅内容 -getSubscriptions().

通知内容 -getNotifications().

为了拿到这些信息,你应该会为每个方法创建独立的中间件,然后将它们链接到 Dashboard 路由上。不过问题是,这些方法的执行是线性的,上一个没结束之前下一个不会开始。可行解决案是并行调用它们。

如你所知由于异步性,Node.js 非常擅长并行调用多个方法。我们不能暴殄天物。我上面提到的那些方法没有依赖性,所以我们可以并行执行它们。这样我们可以削减中间件数量,大幅提高速度。

我们可以用async.js来处理并行,它是一个专门用来调教 JavaScript 异步的 Node 模块。下面代码演示怎样用 async.js 并行调用多个方法的:如果你想更深入了解 async.js ,请移步它的 GitHub 页面。

2. 异步

根据设计 Node.js 是单线程的。基于这点,同步代码会堵塞整个应用。比如说,多数的文件系统 API 都有它们的同步版本。下面代码演示了文件读取的同步和异步两种操作:不过要是你执行那种长时间的阻塞操作,主线程就会被阻塞到这些操作完成为止。这大大降低你应用的性能。所以,最好确保你的代码里用的都是异步版本 API,最起码你应该在性能节点异步。而且,你在选用第三方模块的时候也要很小心。因为当你想方设法把同步操作从你代码中剔除之后,一个外部库的同步调用会让你前功尽弃,降低你的应用性能。

3. 缓存

如果你用到一些不经常变化的数据,你应该把它们缓存起来,改善性能。比如说,下面的代码是获取最新帖子并显示的例子:如果你不经常发贴的话,你可以把帖子列表缓存起来,然后一段时间之后再把它们清理掉。比如,我们可以用Redis模块来达到这个目的。当然,你必须在你的服务器上装 Redis。然后你可以用叫做 node_redis的客户端来保存键/值对。下面的例子演示我们怎么缓存帖子:看到了吧,我们首先检查 Redis 缓存,看看是否有帖子。如果有,我们从缓存中拿这些帖子列表。否则我们就检索数据库内容,然后把结果缓存。此外,一定时间之后,我们可以清理 Redis 缓存,这样就可以更新内容了。

4. gzip 压缩

开启 gzip 压缩对你的 Web 应用会产生巨大影响。当一个 gzip 压缩浏览器请求某些资源的时候,服务器会在响应返回给浏览器之前进行压缩。如果你不用 gzip 压缩你的静态资源,浏览器拿到它们可能会花费更长时间。

优化Node.js Web应用运行速度的10个技巧(node性能优化)

在 Express 应用中,我们可以用内建 express.static() 中间件来处理静态内容。此外,还可以用 compression 中间件压缩和处理静态内容。下面是使用例:

5. 如果可以,在用客户端渲染

现在有超多功能强劲的客户端 MVC/MVVM 框架,比如说AngularJS,Ember,Meteor, 等等,构建一个单页面应用变得非常简单。基本上,你只要公开一个 API,返回JSON响应给客户端就可以了,而不需要在服务端渲染页面。在客户端,你可以用框架来组织 JSON 然后把它们显示在 UI 上。服务端只发送 JSON 响应可以节省带宽,改善性能,因为你不需要在每个响应里面都返回布局标记了,对吧,你只需要返回纯 JSON,然后在客户端渲染它们。

看下我的 这个教程 ,它是关于怎样用 Express 4 公开一个 RESTful APIs的。我还写了 另一篇教程 ,演示了怎样把这些 APIs 和 AngularJS 结合起来。

6. 不要在 Sessions 存储太多数据

典型的Express页面应用, Session 数据默认是保存在内存中的。当你把太多数据保存在 Session 的时候,会导致服务器开销显著增大。所以,要么你切换到别的储存方式来保存 Session 数据,要么尽量减少存储在 Session 中的数据量。

比如说,当用户登录到你的应用的时候,你可以只在 Session 中保存他们的 ID 而不是整个用户数据对象。还有,对于那些你能够从 id 拿到对象的查询,你应该会喜欢用MongoDB或者Redis来存储 session 数据。

7. 优化查询

假设你有个博客,你要在主页上显示最新帖子。你可能会通过Mongoose这样取数据:不过问题是 Mongoose 的 find() 方法会把对象的所有字段都查询出来,而许多字段在主页上并不要求。比如说,commentsis 保存的是特定帖子的回复。我们不需要显示文章回复,所以我们可以在查询的时候把它给剔除掉。这无疑会提高速度。可以像这样优化上面那条查询:

8. 用标准的 V8 方法

集合上的一些操作,比如 map,reduce,和 forEach 不一定支持所有浏览器。我们可以通过前台的库解决部分浏览器兼容性问题。但对于 Node.js,你要确切知道 Google 的V8 JavaScript 引擎支持哪些操作。这样,你就可以在服务端直接用这些内建方法来操作集合了。

9. 在 Node 前面用 Nginx

Nginx是个微小型轻量 Web 服务器,用它可以降低你的Node.js服务器的负载。你可以把静态资源配置到 nginx 上,而不是在 Node 上。你可以在 nginx 上用 gzip 压缩响应,让所有的响应都变得更小。所以,如果你有个正在营运的产品,我觉得你应该会想用 nginx 来改善运行速度的。

. 打包 JavaScript

最后,你还可以大大提高页面应用速度,通过把多个 JS 文件打包。当浏览器在页面渲染中碰到 <script> 元素的时候会被堵塞,直到拿到这个脚本才继续运行(除非设置了异步属性)。比如,如果你的页面有五个 JavaScript 文件,浏览器会发出五个独立的 HTTP 请求来获取他们。如果把这五个文件压缩打包成一个,整体性能将可以大幅提升。CSS 文件也是一样。你可以用诸如 Grunt/Gulp 这样的编译工具来打包你的资源文件。

结论

上面 条技巧肯定可以提高你的 Web 应用的速度的。不过,我知道还有改善和优化的空间。如果你有任何改善性能的技巧的话,在回复里告诉我。

谢谢阅读!

Windows8下搭建Node.js开发环境教程 刚接触node.js,把一些过程记录下来,已备今后查阅。如果有不明确或者错误之处,欢迎批评指正。Node.js是什么?我看了网上一些文章,我的理解是功

Mac OS X 系统下安装和部署Egret引擎开发环境 概述Egret基于TypeScript开发的,而TypeScript编译工具tsc是基于Node.js开发的。所以在安装过程中,我们先需要对于基础支持工具进行安装。需要安装的软件

Egret引擎开发指南之创建项目 Egret提供非常方便的创建工具,我们把创建后的文件总和称之为项目。在后面的操作中,我们对创建的项目进行操作,具体创建步骤如下:需要注意的

标签: node性能优化

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

上一篇:初识Node.js(初识年岁尚温柔 小说 免费)

下一篇:Windows8下搭建Node.js开发环境教程(如何搭建node服务器)

  • 居民企业投资收益免征企业所得税
  • 进项税额转出要补所得税吗
  • 劳务公司的个税如何申报
  • 上下班出了事故算不算工伤
  • 购买土地自建厂房,土地怎样摊销
  • 股东向企业借款属于关联交易吗
  • 企业的财务报表
  • 小规模纳税人出售使用过的汽车
  • 卖二手车发票如何做账?
  • 计提房屋租赁费
  • 小规模纳税人隔月可以作废发票吗
  • 金税盘一直更新登陆不进去
  • 港口建设费2021年归国家税务总局
  • 外籍人士劳务费怎么交税
  • 公司经营情况说明怎么写模板
  • 固定资产改良被替换怎么处理
  • 跨年度的费用发票,如何做分录
  • 插值法求利率计算公式
  • 试用期可以不交五险一金吗
  • 待抵扣进项税额借贷方向
  • 企业所得税法中规定的收入总额包括
  • 财会报告需要哪些证书
  • 银行汇票超期退回怎么办
  • 1697510660
  • 收据可以入账的范围
  • 简易计税发票如何抵扣
  • windows10如何更改时间
  • 结转本期损益要过账吗
  • 软件产品即征即退申请表
  • 留置权什么时候才可以行使
  • 增值税报表上期留底税额填不上
  • linux中rm命令详解
  • 苹果充电宝怎么验真假
  • 其他费用的账务处理
  • 期货公司向客户收取的保证金属于谁所有
  • 观察者模式 mvc
  • 2017年8月21日是什么日子
  • yifile怎么使用
  • PHP:image_type_to_extension()的用法_GD库图像处理函数
  • 收到员工罚款分录
  • 两个岗位 如何选择
  • 认缴制下实收资本需要验资吗
  • 投资收益会计准则
  • 什么是分红型保险?
  • 人工智能内容生成
  • react.fc
  • 会计证书现场领取
  • 哪些农产品属于免税
  • 小规模固定资产处置税率
  • ps位图矢量化
  • 以股权抵债的会计分录
  • 本月没有销项只有进项 还认证发票吗
  • 长期股权投资损益调整
  • mysql如何判断日期是周末
  • 报销加油费怎么做账
  • 小规模纳税人劳保用品可以抵扣吗
  • 企业收到的
  • 现金比率的计算例题
  • 其他业务收入怎么申报增值税
  • 出租房屋损坏赔偿
  • 外资企业所得税优惠政策
  • 专用发票不抵扣要认证吗
  • win7传真和扫描
  • centos6.5共享文件夹
  • svchoost.exe - svchoost是什么进程 有什么作用
  • 如何解决叛逆心理
  • linux操作系统主要学什么
  • windows102021年更新
  • win8.1 应用商店是不是不能用了
  • win10预览版21301bug
  • 用滑动门技术设计一幅画
  • unity 更新
  • angularjs2
  • JavaScript中的变量名不区分大小写
  • python环境及基础语法
  • 深圳市税务局网上办税大厅官网
  • 江之都财税服务集团有限公司地址
  • 海南省国家税务局电子税务局
  • 小规模纳税人可以用专票抵扣税吗
  • 税务总局电子申报软件怎么用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设