这是我参与「第四届青训营 」笔记创作活动的第2天
Node.js简介
Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。
Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,V8引擎执行Javascript的速度非常快,性能非常好,基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。
Node.js的组成成分
Node.js运行时结构-V8,libuv
- V8:JavaScript Runtime,诊断调试工具(inspector)
- libuv:eventloop(事件循环),syscall(系统调用)
Node.js运行时结构-特点
1.异步IO
当Node.js执行I/o操作时,会在响应返回后恢复操作,而不是阻塞路线并占用额外内存等待。
2.单线程
- J单线程
实际:JS线程+uv线程+VB任务线程池+ V8 Inspector线程 - 优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比 较高效地利用系统资源
- 缺点:阻塞会产生更多负面影响
解决办法:多进程或多线程
编写Http Server-安装Node.js
- Mac, Linux推荐使用nvm。多版本管理。
- Windows推荐mm4w或是官方安装包。
- 安装慢,安装失败的情况,设置安装源。
编写 http server-debug
- V8 Inspector开箱即用、特性丰富强大、与前端开发一致、跨平台
node--inspect
open http://localhost:9229/json - 场景:
查看console.log内容
breakpoint
高CPU、死循环:cpuprofile
高内存占用 heapsnapshot
性能分析
编写 qhttp server--部署
- 部署要解决的问题
1.守护进程:当进程退出时,重新拉起
2.多进程: cluster便捷地利用多进程
3.记录进程状态,用于诊断 - 容器环境
通常有健康检查的手段,只需考虑多核cpu利用率即可