node.js适合做啥网站

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js适合做啥网站相关的知识,希望对你有一定的参考价值。

参考技术A

NodeJS的特点:

    它是一个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君的小伙伴



NO.1 【前言】


1.1.Node.js之父


Node.js之父是一个叫做Ryan Dahl(瑞安·达尔)的数学系博士,Web服务器专家。就是下面这哥们。

Node.js(一)——前世今生

他在2009年推出Node.js,但是2012年退出了Node.js小组,转战GO语言。原因可能是在于:
  • Node适合小型,实时事务型服务器网站;

  • GO更适合构建大型服务器网站;


1.2.Node.js出现的背景


目的:为了解决Web服务器的高并发性能问题。


我们来看一下web服务器究竟有什么性能问题?看下图

Node.js(一)——前世今生

图1 请求/响应示意图

我们知道,每次用户在客户端交互的时候都会发送请求,响应请求,去服务器上获取资源,服务器还可能和数据库进行I/O操作,这势必需要一点时间,当用户多的时候,网络请求延迟将会更长。

因此,我们需要缩短发送请求到响应请求的时长。


为此,我们可以从以下几个方面考虑优化:
  • 让发送请求快一点(不能控制,由客户端网速决定);

  • 让响应快一点(可以控制,将服务器带宽提高, 通过CDN加速等,但考虑到成本,不可能无限的提高带宽);

  • 让服务器处理请求任务快一点(优秀的程序员可以控制,小编这种菜鸟不行);

  • 让服务器从磁盘读取/写入数据到数据库快一点(不能控制,磁盘的读取速度有上限)


为了解决高并发的问题,传统服务器都是通过“多线程”解决,即发送一个请求就开启一条线程。

我们的Ryan Dahl(瑞安·达尔)尝试过用Ruby,c,Lua去解决,但都因为语言自身的各种限制而一一失败。直到V8引擎的出现。

1.3.V8引擎


那么,什么是V8引擎呢?
V8引擎是一款专门对JavaScript语言进行解释和执行的流程虚拟机。比如把V8引擎嵌入到浏览器中,那么我们写的JavaScript代码就会被浏览器所执行;那么如果把V8引擎嵌入到服务器环境下,那么我们写的JavaScript代码就会被服务器所执行。
总之,一句话, V8引擎嵌入到不同的宿主环境中时,可以把JavaScript语言应用到不同的多领域中。

我们的Ryan Dahl(瑞安·达尔)修改了V8引擎的内核,  把它用在了服务器开发,  经过修改后的这样一套东西就被称为Node.js。

NO.2 【Node.js简介】


2.1.什么是Node.js


Node.js是一个让JavaScript运行在 服务器端的 开发平台,Node之前, js代码只能运行在客户端, Node之后, js代码可以和操作系统(Mac OS,  windows, Linux...)交互,  从浏览器延伸到了服务器。


Node.js一开始叫Web.js, 目的就是用于写高性能Web服务器的,后来越写越大, 形成了一个生态(服务器开发,  各种框架的依赖...), 改名为Node.js。

Node.js(一)——前世今生



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特点


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中,在一个时刻,只能执行一个事件回调函数,  但是在执行一个事件回调函数的中途,可以转而处理其他事件比如,有新用户连接了),然后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制。



NO.3 【Node.js应用方向】


3.1.特点


Node.js善于I/O,不善于计算。因此,如果你的业务有很多的CPU计算,实际上也相当于这个计算阻塞了这个单线程,就不适合Node开发。
而当应用程序需要处理大量并发的I/O,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,Node.js非常适合。Node.js也非常适合与webSocket配合,开发长连接的实时交互应用程序。


适用场景:

  • 网站开发(如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的情况


多一个点在看

多一条小鱼干

Created with Sketch.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             您的支持,是我写作的最大动力 一台电脑、一杯水、一只傻狗、一个我 生命中出现的任何人,都值得被感恩、铭记

以上是关于node.js适合做啥网站的主要内容,如果未能解决你的问题,请参考以下文章

在 node.js --prof 输出中,这个名字奇怪的 C++ 函数在做啥?

node.js能做啥

Node.js——前世今生

Node.js简介

无论我做啥,都会在 Node.js 中不断收到“ConfigError:Missing region in config”错误

express js 可以做啥