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

98 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

本堂课重点内容

  1. Node.js的应用场景(why)
  2. Node.js运行时结构(what)
  3. 编写Http Server (how)
  4. 延伸话题

详细知识点

Node.js的应用场景

  1. 前端工程化
  2. web服务端应用
  3. Electron跨端桌面应用

Node.js运行时结构

image.png

V8: JavaScript Runtime,诊断调试工具(inspector)

libuv: eventloop (事件循环,syscall (系统调用)

特点:

  1. 异步I/O

  2. 单线程 worker_ thread 可以起独立线程,但每个线程的模型没有太大变化

    • JS单线程 实际:JS线程+uv线程池+V8任务线程池+V8 Inspector线程
    • 优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较高效地利用系统资源
    • 缺点:阻塞会产生更多负面影响 解决办法:多进程或多线程
  3. 跨平台(大部分功能、api)

    Node.js跨平台+ JS无需编译环境(+ Web跨平台+诊断工具跨平台)=开发成本低(大部分场景无需担心跨平台问题),整体学习成本低

编写Http Server

  1. 安装Node.js

  2. 编写Http Server + Client,收发GET, POST请求

    • Http Server
    //Hello World
    const http = require('http')
    const port = 3000
    const server = http.createServer((req,res)=>{
    res.end('hello')
    })
    server.listen(port,()=>{
      console.log(`server listens on: ${port}`)
    }
    
    • Client

    • Promisify Promisify只适用于只被调用一次的回调函数 技巧:将callback转换成promise

  3. 编写静态文件服务器 与高性能、可靠的服务相比,还差什么? 1.CDN:缓存+加速 2.分布式储存,容灾 外部服务: cloudflare, 七牛云,阿里云,火山云...

  4. 编写React SSR服务

    SSR(server side rendering)有什么特点?

    • 相比传统HTML模版引擎:避免重复编写代码
    • 相比SPA (single page application) :首屏渲染更快,SEO友好
    • 缺点: 通常qps较低,前端代码编写时需要考虑服务端渲染情况
  5. 适用inspector进行调试、诊断

    • V8 Inspector:开箱即用、特性丰富强大、与前端开发一致、跨平台

      node -inspect

      open http://localhost: 9229/json

    • 场景:

      • 查看console.log内容
      • breakpoint
      • 高CPU、死循环: cpuprofile
      • 高内存占用: heapsnapshot
      • 性能分析
  6. 部署简介:

    部署要解决的问题

    • 守护进程:当进程退出时,重新拉起

    • 多进程: cluster 便捷地利用多进程

    • 记录进程状态,用于诊断

    容器环境

    • 通常有健康检查的手段,只需考虑多核cpu利用率即可

课后个人总结

学习完这堂课,收获颇多,了解了node运行时的结构,如何编写HTTP server以及部署的相关问题。Node.js的出现让服务端也能运行JavaScript,Node.js对于我来说是挺有意思的一个东西,值得去学习、研究。

参考

github.com/joyeecheung…