当前位置: 首页 > 后端技术 > Node.js

Node.js学习笔记深入浅出(一)

时间:2023-04-04 00:37:32 Node.js

Node介绍1.Node的诞生过程Node诞生于2009年3月。2.节点命名与起源节点别名:Nodejs、NodeJS、Node.js。2.1WhyJavaScript设计高性能Web服务器的几个关键点:事件驱动、非阻塞I/O。综合考虑高性能、事件驱动、无历史包袱三大原因,JavaScript成为了Node.js的实现语言。2.2为什么叫Node?Node可以构建服务器、客户端和命令行工具。Node已经发展成为不共享任何资源的单线程、单进程系统。其目的是成为一个快速且可扩展的网络应用平台。节点本身非常简单。许多节点通过通信协议组织起来,非常容易扩展以达到构建大规模网络应用的目的。每个Node进程都被构建为这个网络应用的一个节点,这才是它名字的真正含义。3、Node给JavaScript带来的意义Node打破了以往JavaScript只能在浏览器中运行的局面,前后端编程环境统一,可以大大降低前端所需的上下文交换成本-端和后端转换。4.Node的特性作为后端JavaScript运行的平台,Node保留了前端浏览器JavaScript中熟悉的接口,没有改变语言的任何特性,仍然依赖作用域链和原型链。不同的是,它把在前端广泛使用的思想迁移到了服务器端。4.1异步I/O异步调用中对结果值的捕获符合“别叫我,我来叫你”的原则。在Node中,大多数操作都是异步调用的。4.2事件和回调函数事件的编程方式具有轻量级、松散耦合、只关注事务点的优点。回调函数无处不在。在JavaScript中,函数是一等公民,函数可以作为对象传递给方法作为调用的实际参数。4.3单线程在Node中,JavaScript不能与其他线程共享任何状态。单线程的优点:不需要像多进程编程那样关心状态同步问题;没有死锁;没有在线线程交换带来的性能开销;单线程缺点:无法使用多核CPU;错误会导致整个应用程序退出时,应用程序的健壮性值得检验;大量计算占用CPU,无法继续调用异步I/O;WebWorks可以创建工作线程进行计算,解决JavaScript大计算阻塞UI渲染的问题。工作线程为了不阻塞主线程,通过消息传递的方式传递运行结果,同时也阻止了工作线程访问主线程中的UI。Node解决单线程计算量大的方法:child_process(子线程)。子流程:通过将计算分发到各个子流程,可以分解大量的计算,然后通过事件消息在流程之间传递结果,可以保持应用模型的简单性和低依赖性。4.4跨平台Node可以在Windows和*nix平台上运行,得益于在操作系统和Node的上层模块系统libux之间构建了一个平台层架构。5、节点应用场景节点应用场景主要分为I/O密集型和CPU密集型。5.1I/O密集型Node面向网络,擅长并行I/O,可以有效组织更多的硬件资源,提供更多更好的服务。I/O密集型优点:利用事件循环的处理能力,而不是启动每个线程为每个请求服务,占用资源极少。5.2你不擅长CPU密集型业务吗?Node出色的计算能力主要来源于V8的深度性能优化。CPU密集型应用给Node带来的挑战:由于JavaScript是单线程的,如果长时间运行的计算(比如大循环),CPU时间片无法释放,导致后续I/O无法发起。但是,通过将大规模的计算任务适当调整分解为多个小任务,可以及时释放计算,不会阻塞I/O调用的发起,这样既可以享受到并行异步I/O的好处,可以充分利用CPU。Node充分利用CPU的方式:通过编写C/C++扩展来高效利用CPU,一些V8无法做到极致性能的地方通过C/C++实现;通过子进程,使用进程间消息传递的结果,分离计算和I/O;CPU密集度并不可怕,如何合理调度才是诀窍。5.3与旧系统和平共处旧系统有非常稳定的数据输出,继续为传统网站服务,同时为手机版提供数据源。Node使用数据源作为数据接口以利用异步并行性。5.4分布式应用阿里巴巴的数据平台。5.5节点用户节点用户:前后端编程环境统一;(Yahoo)Node为实时应用带来高性能I/O;(腾讯、花瓣、蘑菇街)并行I/O使用户能够更高效地利用分布式环境;(Alibaba,eBay)并行I/O,有效利用稳定接口提升Web渲染能力;(SnowballFinance,LinkedIn)云计算平台提供Node支持;(微软、阿里云、百度云)游戏开发领域;(网易)工具应用;