Node.js简单认识篇|青训营笔记

81 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第10天。

后续持续更新,后续会去系统的看一下node是怎么写的,这里显示简单认识一下

Node.js的应用场景

  1. 前端工程化

    • 打包工具类:webpack,vite。。。
    • Uglify:uglifyjs
    • Transpile:bablejs,typescript
    • 其他语言加入竞争:基于go实现的ebuild,基于rust实现的parcel,prisma
  2. web服务端应用

    Nodejs和传统后端比起来具有一些优势

    • 学习效率平缓,开发效率高
    • 运行效率接近常见的编程语言
    • 社区生态丰富及工具链成熟(npm,V8 inspector)
    • 与前端结合的场景会有优势(SSR)

    最主要的是,他的学习成本相对去其他的服务器语言来说,会低一点

  3. Electro跨端桌面应用

    • 商业应用:vscode, slack, discord, zoom等等的桌面应用都是用Electron开发的
    • 大型公司的效率工具,大部分都是基于 Electron 做

Node.js运行时环境

Nodejs运行时结构特点

  1. 异步

    当Node.js执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外的内存等待

    sequenceDiagram
        participant A as ReadFile()
        participant J as Node
        participant K as others
        A->>+J: 异步调用
        A->>+K: 其他调用
        activate J
        activate A
        J-->>-A: 返回数据
        deactivate J
        deactivate A
        K-->>-A: 返回数据
        activate A
        deactivate A
    

    当调用异步API(fs.readFile())读取文件时,会把读取文件的操作交给libuv的线程池去做,此时就不用等到文件读取完,就可以做其他调用,之后文件读取的操作从node线程处理完返回给主线程执行回调,然后在做其他事情

  2. 单线程

    实际:JS线程+ uv线程 +V8任务线程池 + V8 Inspector线程

    • 优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较有效的利用系统资源

    • 缺点:阻塞会产生更多的负面影响

      解决问题:多线程或多进程

  3. 跨平台

    • 跨平台(大部分功能,api)

    • Node.js跨平台+JS无需编译环境(+web跨平台+诊断工具跨平台)

      这就意味着,开发成本低(大部分场景无需担心跨平台问题),整体学习成本低

编写Http Server

  1. 安装Node.js

    参考博客:【Node.js】Node.js安装及环境配置 - 腾讯云开发者社区-腾讯云 (tencent.com)

  2. 编写

    • 首先先引入required模块,用来载入http模块
    • 创建服务器,我们需要引入http.createServer()
    • 并使用listen方法来绑定端口号,通过reponserequest来接受和响应数据
      • res.end()就是用来发送响应数据的
    const http = require('http')
    const server = http.createServer((req, res) => {
        res.end('hello')
    }).listen(3000)
    console.log('Server running at http://127.0.0.1:3000/');
    

    这样启动后我们就可以在3000端口上看到hello