菲律宾 做菠菜网站,建设一家网站多少钱,wordpress更换链接自动跳转,国外免费logo设计网站Node.js入门之—1.1Node.js 简介 文章目录 Node.js入门之—1.1Node.js 简介什么是 Node.js错误说法 Node.js 的特点跨平台三方类库自带http服务器非阻塞I/O事件驱动单线程 Node.js 的应用场合适合用Node.js的场合不适合用Node.js的场合弥补Node.js不足的解决方案 什么是 Node.j…Node.js入门之—1.1Node.js 简介 文章目录 Node.js入门之—1.1Node.js 简介什么是 Node.js错误说法 Node.js 的特点跨平台三方类库自带http服务器非阻塞I/O事件驱动单线程 Node.js 的应用场合适合用Node.js的场合不适合用Node.js的场合弥补Node.js不足的解决方案 什么是 Node.js
Node.js简称Node是一个可以使JavaScript运行在服务器端的开发平台。JavaScript本是一种Web前端语言Node.js让JavaScript成为服务器端脚本语言。Node.js选择JavaScript作为实现语言的原因 JavaScript满足CommonJS标准符合事件驱动用户较多且门槛较低Chrome的V8引擎具有出色的性能。 Node.js将V8引擎封装起来作为服务器运行平台以执行JavasScript编写的后端脚本程序。
错误说法
Node.js是一门编程语言 × Node.js 是新版本的 JavaScript? ×
Node.js运行时环境包含执行JavaScript程序所需的一切条件。该引擎会将JavaScript代码转换为更快的机器码。Node.js进一步提升JavaScript的能力使JavaScript可以访问文件、读取数据库、访问进程从而胜任后端任务。使用Node.js 的最大优点是开发人员可以在客户端和服务器端编写JavaScript打通了前后端。Node.js发展迅速目前已成为JavaScript服务器端运行平台的事实标准。
Node.js 的特点
跨平台
Node.js是跨平台的能运行在Windows、macOS和Linux平台上。
三方类库
Node.js除了自己的标准类库之外还可使用大量的第三方模块系统来实现代码的分享和重用。
自带http服务器
与其他后端脚本语言不同的是Node.js内置了处理网络请求和响应的函数库也就是自备了HTTP服务器所以不需要额外部署HTTP服务器。 非阻塞I/O
非阻塞I/O又称异步式I/O是Node.js的重要特点。阻塞I/O是指线程在执行过程中遇到I/O操作时操作系统会撤销该线程的CPU控制权使其暂停执行处于等待状态同时将资源转让给其他线程。非阻塞I/O是指当线程遇到I/O操作时不会以阻塞方式等待I/O操作完成或数据返回而只是将I/O请求转发给操作系统继续执行下一条指令。
事件驱动
非阻塞I/O是一种异步方式的I/O与事件驱动密不可分。事件驱动以事件为中心Node.js将每一个任务都当成事件来处理。Node.js在执行过程中会维护一个事件队列需执行的每个任务都会加入事件队列并提供一个包含处理结果的回调函数。在事件驱动模型中会生成一个事件循环线程来监听事件不断地检查是否有未处理的事件。Node.js的异步机制是基于事件的所有磁盘I/O、网络通信、数据库查询事件都以非阻塞的方式请求返回的结果由事件循环线程来处理。
单线程
Node.js的应用程序是单进程、单线程的但是通过事件和回调支持并发性能变得非常高。在阻塞模式下一个线程只能处理一项任务要想提高吞吐量必须使用多线程。在非阻塞模式下线程不会被I/O操作阻塞该线程所使用的CPU核心利用率永远是100%I/O操作以事件的方式通知操作系统。Node.js在主线程中维护一个事件队列当接收到请求后就将该请求作为一个事件放入该队列中然后继续接收其他请求。Node.js内部通过线程池来完成非阻塞I/O操作Node.js的单线程是指对JavaScript层面的任务处理是单线程的而Node.js本身是一个多线程平台。 Node.js采用非阻塞I/O与事件驱动相结合的编程模式与传统同步I/O线性编程思维有很大的不同Node.js程序的控制很大程度要依靠事件和回调函数这不符合开发人员的常规线性思路需要将一个完整的逻辑拆分为若干单元事件从而增加了开发和调试的难度。 Node.js 的应用场合
适合用Node.js的场合
REST APIREST API是一种前后端分离的应用程序架构。单页Web应用加载单个HTML页面并在用户与应用程序交互时动态更新该页面的Web应用程序。统一Web应用的UI层Node.js是面向服务的架构其能够更好地实现前后端的依赖分离可以将所有的关键业务逻辑都封装成REST APIUI层只需要考虑如何用这些API构建具体的应用。准实时系统如聊天系统、微博系统、博客系统的准实时社交系统特点是轻量级、高流量没有复杂的计算逻辑。游戏服务器程序员不必使用C语言就能开发游戏的服务器程序。 微服务架构Node.js也可用于实现基于微服务架构的应用。
不适合用Node.js的场合
数据加密和解密。数据压缩和解压。模板渲染。
弥补Node.js不足的解决方案
存在的问题解决方案CPU密集型任务偏向于CPU计算操作需要Node.js直接处理在事件队列中如果前面的CPU计算任务没有完成那么后面的任务就会被阻塞出现响应慢的情况使得后续I/O操作无法发起将大型运算任务分解为多个小任务适时释放CPU计算空间资源以免阻塞I/O调用的发起单线程无法利用多核CPU。多CPU或多核CPU的服务器当Node.js被CPU密集型任务占用导致其他任务被阻塞时其他CPU核心处于闲置状态从而造成资源浪费Node.js程序一旦在某个环节崩溃整个系统都会崩溃这会影响其可靠性1部署Nginx反向代理和负载均衡开启多个进程绑定多个端口2使用cluster模块构建应用集群启动多个Node.js实例开启多个进程以监听同一个端口