Node.js 与前端开发实战 | 青训营笔记

149 阅读2分钟

Node.js 与前端开发实战 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天,学习了第五届字节跳动青训营前端专场的掘金录播课「Node.js 与前端开发实战」,以下为本次的学习笔记:

Node.js的应用场景

  • 前端工程化

    初期使用的库都是从浏览器上直接加载的,但是大部分时候不需要服务端的能力

    • Bundle: webpack, vite, esbuild, parcel
    • Uglify: uglifyjs
    • Transpile: bablejs, typescript
    • 其他语言加入竞争:esbuild, parcel, prisma
    • Node.js必不可缺,难以替代
  • Web服务端应用

    可以做到其他传统后端语言做到的事情

    • 学习曲线平缓,开发效率较高
    • 运行效率接近常见的编译语言
    • 社区生态丰富及工具链成熟
    • 与前端结合的场景会有优势
    • 现状:竞争激烈,Node.js有自己独特的优势
    • 例如:头条搜索,西瓜视频,懂车帝
  • Electron 跨桌面应用

    • 商业应用:vscode, slack, discord, zoom
    • 大型公司内的效率工具
    • 现状:大部分场景在选型时,都值得考虑
    • 例如:飞书,飞连

Node.js运行时结构

image.png

特点

  • 异步I/O

    在响应返回后恢复操作,而不是阻塞线程并占用额外内存

  • 单线程

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

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

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

    解决办法:多进程或多线程

  • 跨平台

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

    => 开发成本低,整体学习成本低

编写Http Server

Windows推荐使用 nvm4w 或是官方安装包

  1. 引入 required 模块: 我们可以使用 require 指令来载入 Node.js 模块,将实例化的 HTTP 赋值给变量 http

    var http = require("http");
    
  2. 创建服务器: 服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。

    使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。

    var http = require('http');
    ​
    http.createServer(function (request, response) {
    ​
        // 发送 HTTP 头部 
        // HTTP 状态值: 200 : OK
        // 内容类型: text/plain
        response.writeHead(200, {'Content-Type': 'text/plain'});
    ​
        // 发送响应数据 "Hello World"
        response.end('Hello World\n');
    }).listen(8888);
    ​
    // 终端打印如下信息
    console.log('Server running at http://127.0.0.1:8888/');
    
  3. 接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。

    node server.js
    Server running at http://127.0.0.1:8888/
    

延伸话题

  • 好处:

    • 从使用者的角色逐步理解底层细节,可以解决更复杂的问题
    • 自我证明,有助于中职业发展
    • 解决社区问题,促进社区发展