济南网站建设 伍际网络,网站域名备案授权书,信息发布网站开发模板,南通高端网站建设公司node做后端的缺点是#xff1a;
1.nodejs单线程#xff0c;不能做cpu密集型操作#xff0c;导致时间片不能释放#xff0c;阻塞后面的任务。
2.nodejs可靠性比较低#xff0c;一个地方报错会导致整个程序崩溃#xff0c;需要守护进程或者docker重启来解决。
3.像使用多…node做后端的缺点是
1.nodejs单线程不能做cpu密集型操作导致时间片不能释放阻塞后面的任务。
2.nodejs可靠性比较低一个地方报错会导致整个程序崩溃需要守护进程或者docker重启来解决。
3.像使用多核性能的时候需要使用cluster或者部署多个实例比较麻烦。4.内存默认0.7G和1.4G设置大了之后垃圾回收会变慢可能需要多部署几个实例。 优点是
1.nodejs底层异步io性能比较好。
2.NodeJs超强的高并发能力。
3.开发速度高弱类型语言比较灵活不像强类型一样需要各种转换代码量少。
4.前后端编程环境统一。
5.开发周期短、开发成本低、学习成本低。 具体分析如下 缺点
1.不适用于CPU密集型
如果是I/O任务Node.js会把任务交给线程池来异步处理高效简单因此Node.js适合I/O密集型任务。 但不是所有任务都是I/O密集型任务如碰到以下CPU密集型任务时 数据加解密node.bcrypt.js 数据压缩和解压node-tar
Node.js就会亲自处理一个一个的计算前面的任务没有执行完后面的任务只能干等着。
目前好一点的服务器都至少是2核而 Node.js 只有一个 EventLoop也就是只占用一个 CPU 内核当Node.js 被CPU 密集型任务占用导致其他任务被阻塞时却还有 CPU 内核处于闲置状态造成资源浪费。
因此Node.js并不适合CPU密集型任务。
但实际上大多数网站服务器端都不会做太多的计算它们接受到请求后把请求交给其他服务来处理如RPC用来读取数据库等然后等待结果返回。Node.js采用了单线程模型它不会为每个请求分配一个线程而是用一个主线程处理所有请求对于I/O操作则采用异步处理它避开了创建、销毁线程以及在线程间切换所需的开销和复杂性。
因此Node.js做后端主要用于BFF层、SSR。
但是Node.js只能利用单核的问题也早就有解决方案了比如Egg.js框架中的Egg-Cluster模块就利用多进程非常好的解决这个问题。但是仍然较为麻烦。 2.分布式应用基础设施不完善
分布式指的是在多台不同的服务器中部署不同的服务模块已进程为单位派发到服务器上通过远程调用RPC通信并协同工作最终对外提供服务。
对于分布式应用Node.js的优势不能很好显示出来。 3.可靠性低
一旦代码某个环节崩溃整个系统都崩溃
原因单进程单线程解决方案1Nnigx反向代理负载均衡开多个进程绑定多个端口2开多个进程监听同一个端口使用cluster模块
4.node内存限制
在32位系统限制 0.7GB64位系统限制 1.4GB
导致的问题 Node 无法直接操作大文件对象。
例如我想读取一个 4g 的文件来处理即使物理内存有 32GB在单个 Node 进程中也是不能完全的使用的。
我们平常在声明一些对象的时候要是没有Node垃圾回收机制回收 就会占用V8限制的内存
为什么有内存限制
内存限制主要原因是v8的垃圾回收制度。1.5GB内存做一次小的回收需要50MS做一次非增量性回收需要1S以上并且这会使JS线程暂停。因此限制内存。 优点
1、Nodejs语法完全是js语法只要你懂js基础就可以学会Nodejs后端开发
Node打破了过去JavaScript只能在浏览器中运行的局面。前后端编程环境统一可以大大降低开发成本。
2、NodeJs超强的高并发能力 NodeJs的首要目标是提供一种简单的、用于创建高性能服务器及可在该服务器中运行的各种应用程序的开发工具。 首先让我们来看一下现在的服务器端语言中存在着什么问题。在Java、PHP或者.NET等服务器语言中会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存。也就是说理论上一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让web应用程序支持更多的用户就需要增加服务器的数量而web应用程序的硬件成本当然就上升了。 NodeJs不为每个客户连接创建一个新的线程而仅仅使用一个线程。当有用户连接了就触发一个内部事件通过非阻塞I/O、事件驱动机制让Node.js程序宏观上也是并行的。使用Node.js一个8GB内存的服务器可以同时处理超过4万用户的连接。
3、实现高性能服务器 严格地说Node.js是一个用于开发各种web服务器的开发工具。在Node.js服务器中运行的是高性能V8 JavaScript脚本语言该语言是一种可以运行在服务器端的脚本语言。 那么什么是V8 JavaScript脚本语言呢该语言是一种被V8 JavaScript引擎所解析并执行的脚本语言。V8 JavaScript引擎是由Google公司使用C语言开发的一种高性能JavaScript引擎该引擎并不局限于在浏览器中运行。Node.js将其转用在了服务器中并且为其提供了许多附加的具有各种不同用途的API。例如在一个服务器中经常需要处理各种二进制数据。在JavaScript脚本语言中只具有非常有限的对二进制数据的处理能力而Node.js所提供的Buffer类则提供了丰富的对二进制数据的处理能力。 另外在V8 JavaScript引擎内部使用一种全新的编译技术。这意味着开发者编写的高端的 JavaScript 脚本代码与开发者编写的低端的C语言具有非常相近的执行效率这也是Node.js服务器可以提供的一个重要特性。
4、开发周期短、开发成本低、学习成本低
Node.js自身哲学是花最小的硬件成本追求更高的并发更高的处理性能。