Node.js与前端开发实战

132 阅读1分钟

Node.js 运行时的结构

acron、node-inspect(做为调试)、npm(包管理工具)、用户代码(自己业务的代码)


Node.js Core(JavaScript) N-API(底层API、性能优化等) Node.js Core(C++)


v8(JS引擎,JavaScript Runtime,诊断调试工具(inspector))

  • V8 Inspector:开箱即用、特性丰富强大、与前端开发一致、跨平台。
  • 场景:
    • 查看console.log内容
    • breakpoint
    • 高 CPU、死循环:puprofile
    • 高内存占用:heapsnapshot
    • 性能分析

libuv(封装了操作系统的api syscall(系统调用),提供了eventloop(事件循环))

nghttp2、zlib(压缩和解压缩的算法)

c-ares(DNS查询的库)

llhttp(HTTP协议的解析)

OpenSSL(网络层的加密解密的工具)

特点

  1. 异步I/O

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

  2. 单线程

  • 实际:JS线程 + uv线程池 + V8任务线程池 + V8 Inspector线程
  • 优点:不用考虑多线程状态同步问题,也不需要锁,同时还能比较高效地利用系统资源
  • 缺点:阻塞会产生更多负面影响。
    • 解决办法:多进程或多线程 worker_thread可以起独立线程,但每个线程的模型没有太大变化
  1. 跨平台

SSR(服务端渲染)

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

  • 相比传统 HTML 模板引擎,避免重复编写代码
  • 相比SPA(single page application):首屏渲染更快,SEO友好
  • 缺点:通常 qps 较低,前端代码编写时需要考虑服务端渲染情况

难点:

  1. 需要处理打包代码
  2. 需要思考前端代码在服务端运行时的逻辑
  3. 除对服务端无意义的副作用,或重置环境