Node.js五大应用性能技巧小结(必须收藏)


Posted in Javascript onAugust 09, 2017

本文介绍了Node.js五大应用性能技巧,分享给大家,具体如下:

一、实现一个反向代理服务器

相比大多数应用服务器,Node.js 可以很轻松的处理大量的网络流量,但这并不是 Node.js 的设计初衷。

如果你有一个高流量的站点,提高性能的第一步是在你的 Node.js 前面放一个反向代理服务器。这可以保护你的 Node.js 服务器免于直接暴露在网络中,而且可以允许你灵活的使用多个应用服务器做负载均衡和静态文件缓存。

Node.js五大应用性能技巧小结(必须收藏)

使用 NGINX 在一个已经存在的服务器前做反向代理,作为 NGINX 的一个核心应用,已经被用于全世界成千上万的站点中。

下面是使用 NGINX 作为反向代理服务器的优点:

简化了权限处理和端口分配

更高效的处理静态资源

更好的处理 Node.js 崩溃情况

缓解 DoS 攻击的影响

注:这篇文章解释如何在 Ubuntu 14.04 或者 CentOS 环境中使用 NGINX 做反向代理服务器,而且使用 NGINX 在 Node.js 前做反向代理服务器是有效的。

二、缓存静态文件

随着流量的增长,以 Node 为基础的服务器开始显现压力。这时,你可能想做两件事:

使用更多的 Node.js 服务器。

在多个服务器间做负载均衡

这其实很简单,NGINX 一开始就是作为反向代理服务器来实现的,这使其很容易做缓存和负载均衡等。

Modulus 的网站有一篇有用的文章,介绍了使用 NGINX 做 Node.js 反向代理服务器的性能提升。只使用 Node.js 时,作者的网站每秒能处理 900 个请求。 使用 NGINX 作为反向代理服务器来处理静态文件后,该网站每秒可处理超过 1600 个请求,接近两倍的性能提升。

下面是该网站做上述性能提升的配置代码:

nginx

server {

listen 80;

server_name static-test-47242.onmodulus.net;

root /mnt/app;

index index.html index.htm;

location /static/ {

try_files $uri $uri/ =404;

}

location /api/ {

proxy_pass http://node-test-45750.onmodulus.net;

}

}

三、实现 Node.js 负载均衡

最终目标— Node.js 运行多个应用服务器,并在这些服务器之间均衡负载。

Node.js 实现负载均衡是比较困难的,因为 Node.js 允许浏览器端 JavaScript 和 服务器端 Node.js 通过 json 做数据交互,这就意味着同一个客户端可以反复的访问一个特定的应用服务器,而且多个应用服务器之间共享 session也是比较困难的。

NGINX 实现无状态负载均衡的方式:

Round Robin. 新的请求去列表中的下一个服务器

Least Connections. 新的请求去连接数最少的服务器

IP Hash. 根据客户端 IP 的 hash 值指定服务器

只有 IP Hash 这一种能够可靠的把客户端请求代理到同一台服务器的方式才能使 Node.js 应用服务器受益。

四、代理 WebSocket 连接

所有版本的 HTTP 都是为客户端主动请求服务器来设计的,而 WebSocket 可以实现服务器主动向客户端的消息推送。

WebSocket 协议使客户端和服务器端的稳定交互更加简单,同时也提供更小的交互延迟。当你需要一个全双工的通讯,即客户端和服务器都可以在需要时主动发起消息请求,那么使用 WebSocket 就对了。

WebSocket 协议有健全的 JavaScript 接口,因此也原生适合用 Node.js 作为应用服务器。当连接数上升,使用 NGINX 在客户端和 Node.js 服务器端做代理来缓存静态文件和负载均衡就变得非常有意义。

五、实现 SSL/TLS 和 HTTP/2

越来越多的网站使用 SSL/TLS 来保证信息交互的安全性,你也可以考虑是否要把它加入到你的网站中,但如果你决定要做,那么 NGINX 有两种方式来支持它:

你可以使用 NGINX 做 SSL/TLS 反向代理,Node.js 服务器使用解密后的请求然后返回未加密的内容给 NGINX。

使用 HTTP/2 可以抵消 SSL/TLS 带来的性能开销,NGINX 支持 HTTP/2, 所以你可以同时使用 HTTP/2 和 SSL 代理请求,而你的 Node.js 服务器不需要做任何更改。

在实现阶段你需要更新 Node.js 配置文件中的 URL, 在你的 NGINX 配置文件中使用 SPDY 或者 HTTP/2 优化连接。添加 HTTP/2 支持意味着支持 HTTP/2 的浏览器可以使用新的协议和你的应用交互,而老的浏览器继续使用 HTTP/1.x。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
从JavaScript的函数重名看其初始化方式
Mar 08 Javascript
JQuery 图片延迟加载并等比缩放插件
Nov 09 Javascript
JS 遮照层实现代码
Mar 31 Javascript
javascript创建createXmlHttpRequest对象示例代码
Feb 10 Javascript
jQuery后代选择器用法实例
Dec 23 Javascript
JQuery实现鼠标滚轮滑动到页面节点
Jul 28 Javascript
jQuery 的 ready()的纯js替代方法
Nov 20 Javascript
webpack4实现不同的导出类型
Apr 09 Javascript
详解jquery和vue对比
Apr 16 jQuery
一篇文章弄懂javascript中的执行栈与执行上下文
Aug 09 Javascript
解决layui-open关闭自身窗口的问题
Sep 10 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 #Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 #Javascript
vue.js框架实现表单排序和分页效果
Aug 09 #Javascript
vue页面使用阿里oss上传功能的实例(一)
Aug 09 #Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 #jQuery
vue 打包后的文件部署到express服务器上的方法
Aug 09 #Javascript
vuejs事件中心管理组件间的通信详解
Aug 09 #Javascript
You might like
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
PHP sdk实现在线打包代码示例
2020/12/09 PHP
Javascript this指针
2009/07/30 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
旅行社优秀创业计划书
2014/08/16 职场文书
2016寒假假期总结
2015/10/10 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技