这是我参与 [第五届青训营] 伴学笔记创作活动的第4天
Node.js理念
早期前端库依赖于浏览器,开发者不需要服务端和工程化能力,只需要考虑浏览器兼容性
随着前端发展,前端工程化,各类打包工具出现,js代码需要在浏览器外运行——Nodejs服务端运行时,各类工具依靠node推出
使用nodejs开发web服务端应用,对于前端开发者学习曲线较平缓,社区生态丰富,与前端结合的场景如SSR服务端渲染,使用nodejs非常方便
Node.js特性
异步
I/O时不会阻塞线程,I/O完成后再调用回调,内存占用更少。
单线程
只有js主线程是单线程实际上还有uv线程池,V8任务线程池,V8 Inspector线程——js单线程使得它不需要考虑多线程状态同步,能较高地利用系统资源。然而单线程在阻塞时会产生大量延后,发生更大的负面影响
跨平台
大部分功能和应用场景是跨平台的,并且js本身无需编译环境,需要为跨端做的准备很少,开发的代价较低
Nodejs与electron
electron基于js,html和css,将chromui和Node.js嵌入到二进制的Electron——以做到跨平台的开发,开发者不需要考虑大部分的各平台的差异和兼容,可基于网页开发的技术开发客户端程序。结合网页开发的良好生态以及大量工具、框架,可以做到快速高效地开发,并且UI呈现和变化方便,解决方案成熟——如使用React,Vue,Angular等框架,或是在npm上下载包。
目前使用Electron开发应用已较为成熟——如vscode,slack,飞书等。
使用Node.js编写web服务
//引入http模块编写web服务
const http =require('http')
//设置端口3000
const port = 3000
//调用createSever方法生成服务
const server = http.createServer((req,res) =>{
res.end( 'hello')
})
//监听特定端口上的服务
server.listen(port, ()=> {
console.log('server listens on: ${iport}')
})
总结:
Node.js可以让开发者使用js语言开发web服务端应用,它的出现使得前端工具和生态急速发展,它的跨平台特性带来了基于web的跨端应用的发展。Node.js的出现是前端开发的重要转折点。
Node.js也存在着许多问题,它的语法基于js,js主线程是单线程,在一些场景上性能不好;js以及浏览器虽在大部分应用场景上很实用,但在追求高性能的场景力有不逮,并且各个依赖与工具包导致打包后应用较大,不太节省存储。