node.js适合做啥网站
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js适合做啥网站相关的知识,希望对你有一定的参考价值。
参考技术ANodeJS的特点:
它是一个javascript运行环境
依赖于Chrome V8引擎进行代码解释
事件驱动
非阻塞I/O
轻量、可伸缩,适于实时数据交互应用
单进程,单线程
NodeJS的缺点:
1. 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
2. 只支持单核CPU,不能充分利用CPU
3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
原因:单进程,单线程
解决方案:
(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;
(2)开多个进程监听同一个端口,使用cluster模块;
4. 开源组件库质量参差不齐,更新快,向下不兼容
5. Debug不方便,错误没有stack trace
NodeJS的应用场景:
实时应用:如在线聊天,实时通知推送等等(如socket.io)
分布式应用:通过高效的并行I/O使用已有的数据
工具类应用:海量的工具,小到前端压缩部署(如grunt),大到桌面图形界面应用程序
游戏类应用:游戏领域对实时和并发有很高的要求(如网易的pomelo框架)
NodeJS不适合场景:
CPU使用率较重、IO使用率较轻的应用——如视频编码、人工智能等,Node.js的优势无法发挥简单Web应用——此类应用的特点是,流量低、物理架构简单,Node.js无法提供像Ruby的Rails或者Python的Django这样强大的框架
Node.js——前世今生
还没有关注Eric君的小伙伴
1.1.Node.js之父
Node适合小型,实时事务型服务器网站;
GO更适合构建大型服务器网站;
1.2.Node.js出现的背景
目的:为了解决Web服务器的高并发性能问题。
图1 请求/响应示意图
我们知道,每次用户在客户端交互的时候都会发送请求,响应请求,去服务器上获取资源,服务器还可能和数据库进行I/O操作,这势必需要一点时间,当用户多的时候,网络请求延迟将会更长。
因此,我们需要缩短发送请求到响应请求的时长。
让发送请求快一点(不能控制,由客户端网速决定);
让响应快一点(可以控制,将服务器带宽提高, 通过CDN加速等,但考虑到成本,不可能无限的提高带宽);
让服务器处理请求任务快一点(优秀的程序员可以控制,小编这种菜鸟不行);
让服务器从磁盘读取/写入数据到数据库快一点(不能控制,磁盘的读取速度有上限)
为了解决高并发的问题,传统服务器都是通过“多线程”解决,即发送一个请求就开启一条线程。
1.3.V8引擎
2.1.什么是Node.js
Node.js不是一种独立的语言
PHP, JSP,.... 既是语言, 也是平台
Node.js用JavaScript进行编程, 运行平台是包装后的js引擎(V8)
Node.js是一种轻量级架构
java,php,.net都需要运行在服务器上,apache,tomat,naginx,IIS;
Node.js不用架设在任何服务器软件之上;
用最小的硬件成本,达到更高的并发,更优的处理性能
2.2.Node.js特点
单线程
优势:减少了内存开销(操作系统完全不再有线程创建、销毁的时间开销)【在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存,相当于有一个人就要分配一个线程,就要占用空间大小】
劣势:如果某一个事件被I/O阻塞了,整个线程就阻塞了
非阻塞I/O
当在访问数据库取得数据的时候,需要一段时间。在传统的单线程处理机制中,在执行了访问数据库代码之后,整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,极大地降低了程序的执行效率。
而Node.js中采用了非阻塞型I/O机制,因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。
当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数。为了处理异步I/O,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。
因此,阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须通过多线程。而非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100%。
所以,这是一种特别有哲理的解决方案:与其人多,但是好多人闲着;还不如一个人玩命,往死里干活儿。
事件驱动
概念:不管是新用户的请求,还是老用户的I/O完成,都将以事件方式加入事件环,等待调度
运作流程:在Node中,在一个时刻,只能执行一个事件回调函数, 但是在执行一个事件回调函数的中途,可以转而处理其他事件(比如,有新用户连接了),然后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制。
3.1.特点
适用场景:
网站开发(如express/koa等)
im即时聊天(socket.io)
api(移动端,pc,h5)
HTTP Proxy(淘宝、Qunar、腾讯、百度都有)
前端构建工具(grunt/gulp/bower/webpack/fis3…)
跨平台打包工具
写操作系统(NodeOS)
命令行工具(比如cordova、shell.js)
反向代理(比如anyproxy,node-http-proxy)
编辑器Atom、VSCode等等
图2 企业中使用Node.js的情况
多一个点在看
多一条小鱼干
以上是关于node.js适合做啥网站的主要内容,如果未能解决你的问题,请参考以下文章
在 node.js --prof 输出中,这个名字奇怪的 C++ 函数在做啥?
无论我做啥,都会在 Node.js 中不断收到“ConfigError:Missing region in config”错误