这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
今天的学习重点为Node.js的应用场景、运行时结构,如何编写Http Sever以及Node.js 的衍生话题,以及如何编写Node.js
1.Node.js介绍
Node.js是一个基于 Chrome V8 引擎的 Javascript 运行环境,也是一种高性能、轻量级的 JavaScript 运行环境,支持服务器端和网络应用开发。 Node.js的最大优势就是可以将不同的技术栈进行结合,让 web 开发变得更加快捷高效。
2.Node.js的应用场景
- 应用场景一:前端工程化
- 应用场景二:Web服务端应用
Node.js运行效率接近常见的编译语言,并且社区生态丰富及工具链成熟(npm,v8 inspector),还与前端结合的场景会有优势(SSR),Node.js在这个应用场景的现状是竞争激烈,但是它有自己独特的优势
- 应用场景三:Electron跨端桌面应用 Node.js在这个场景可以做商业应用、大型公司内的效率工具
3.Node.js的运行时结构
Node.js的运行时结构特点:
- 异步I/O
setTimeout(()=>{
console.log("我后执行")
},1000)
console.log("我先执行")
- setTimeout是异步的,上述例子中是要等待一秒钟再输出setTimeout里面的内容,但是再异步,处理请求的时候(或者说在等待那一秒钟到来的时候)在等待过程中,外面的同步内容会先输出,因此先输出“我先执行”,然后结束等待后输出setTimeout里面的内容。
- 简单来说当Node.js执行I/O时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待。因此使用Noed.js最大的好处就是在执行I/O的时候不用去等待,不会阻塞线程的执行
- 单线程
指Node.js的JavaScript线程是单线程的,它不太适合做CPU密集的操作。
可以用worker_thread新起一个独立线程,这个线程和主线程没有太多差别,每个线程的模型没有太大变化
优点是:不用考虑多线程状态同步问题,不需要锁;同时还能比较高效地利用系统资源
- 跨平台
在使用Node.js的时候,例如在本地创建一个文件进行基础通信,在不同平台上它会帮我们完成很多跨平台的工作,我们不用考虑太多跨平台的问题。
const net=request('net')
const socket=new net.Socket('/tmp/scoket.sock')
an'z