阅读 564

Node.js 知识体系(一)-说说你对Node的理解

这是我参与更文挑战的第二十一天,活动详情查看:更文挑战

Node 拥有广大的 JavaScript 程序员基础,并且完全开源!因此拥有一个强大的开发者社区!依靠繁荣的社区力量,已经发展出成熟的技术体系!以及庞大的生态!

Node 被广泛的应用在

  • web 服务
  • 开发工作流
  • 客户端应用
  • ...等诸多领域

Node 在 web 服务领域接受程度是最高的,通常它被用来做一个 BFF 层,即 Backend For Frontend(服务于前端的后端) 。

20210622172155

BFF 层通俗点来讲就是,浏览器和后台的一个中间渲染层,这个中间层负责组装后台返回的各个微服务中的数据。并且组装成前端所需要的数据,再返回到浏览器, 即为了前端所服务的后台服务。

BFF 层的主要职责:

  • 对用户提供 HTTP 服务
  • 使用后端 RPC 服务

这类程序的特点是不需要太强的服务器运算能力,但对程序的灵活性有较高的要求!这两个特点正好和 Node 的优势吻合!

在 web 服务领域搭建一个 Node 的 BFF 层是有很大好处的:

  • 对于业务本身来说:

Node 是最适合做 BFF 层的一门技术,有一个 BFF 层能让前端有能力自由组装后台数据,这可以大量较少业务沟通成本,加快业务的迭代速度。同时,前端开发者能自主决定前端与后台的通信方式,也让前端开发者有更多能力着手 web 应用的性能优化

  • 对于后端和运维工程师来说:

Node BFF 层的搭建绝对不是一个光靠前端工程师就能完成的事情,在搭建过程中涉及到 RPC 调用,系统运维等场景,都需要后端和运维的紧密配合,通过搭建 BFF 层,除了后续能大幅较少自己在繁重业务的工作量之外,还可以大大提升自己在架构领域的知识经验

  • 对于前端工程师来说:

Node 虽然是一门非浏览器技术,但是它基于 JavaScript 环境,能让前端工程师快速上手。学习一门非浏览器技术,对于学习计算机领域的其他知识非常有好处,我们可以经由 Node 涉及 数据库,操作系统,人工智能等技术领域。让前端工程师不再因技术壁垒将眼光局限在浏览器环境内。

Node 有哪些难点

Node 除了 JavaScript 外,其他地方和浏览器技术几乎毫无交集!即使是数据结构,设计模式等程序员通用技巧,也都有侧重点不一样的地方

比如在使用 Node 的过程中,前端工程师需要了解 RPC 调用,进程管理等非浏览器知识,对一些基础薄弱的工程师会造成比较大的困扰

除此之外,在推广 Node 的过程中,可能还会遇到产品,后台,运维 等不同角色质疑。导致前端同学使用 Node 会碰上各种各样的阻力!

因此,除了补充必要的后台开发知识,和系统运维知识之外,还需要对 Node 的优缺点,它能给业务带来的价值,都有非常深入的理解。才能说服他人配合你完成从前端到后台的一整套项目开发

什么是 Node

官网的话

Node® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时 Node 使用了事件驱动,非阻塞 I/O 的模型,使其轻量又高效

自由理解

download

Chrome 浏览器和 Node 的组件构成

  1. Node 运行 JavaScript, 和 Chrome 运行 JavaScript 几乎没有不同!用的是同样的 JavaScript 引擎和模型

  2. Node 主要针对服务端 没有浏览器某些 API,如 documentwindow.....加了许多 自身 API

  3. 对于开发者来说,在 Chrome 里写 JavaScript 控制浏览器 Node 让我们用类似的方式,控制整台电脑

Node 的特点

异步 I/O

事件与回调函数

单线程

Node 保持了 JavaScript 在浏览器中单线程的特点。而且在 Node 中,JavaScript 与其余线程是无 法共享任何状态的。

单线程的最大好处:

不用像多线程编程那样处处在意状态的同步问题,这里 没有死锁的存在,也没有线程上下文交换所带来的性能上的开销。

单线程的弱点 具体有以下 3 方面:

  •  无法利用多核 CPU。
  •  错误会引起整个应用退出,应用的健壮性值得考验。
  •  大量计算占用 CPU 导致无法继续调用异步 I/O。

跨平台

download-1

Node 基于 libuv 实现跨平台的架构示意图

兼容 Windows*nix 平台主要得益于 Node 在架构层面的改动,它在操作系统与 Node 上层模块 系统之间构建了一层平台层架构,即 libuv。目前,libuv 已经成为许多系统实现跨平台的基础组件。

通过良好的架构,Node 的第三方 C++模块也可以借助 libuv 实现跨平台。目前,除了没有保持 更新的 C++模块外,大部分 C++模块都能实现跨平台的兼容。

Node 可以用来做什么

服务端渲染

Node 被广泛得用在 web 服务领域

如:腾讯视频-- 网页现在服务端渲染,最后返回浏览器端的(在浏览器中查看源代码,如果有对应的 dom 结构,就是服务端渲染)

服务端渲染的优点

  • 有利于 SEO
  • 有利于首屏渲染加速

服务端渲染渲染时需要考虑, 前后端代码复用的问题

前后端同构: 即同一套代码,既可以用在后端,也可以用在前端

构建工作流

  • gulp
  • webpack
  • ...

游戏

  • wayward

客户端应用

  • 比如:最流行的开发工具-VSCode
  • 在已有网站的情况下需要新开发客户端应用
  • 用 Node 客户端技术(eletron) 实现,最大限度复用现有工程

最后

文章浅陋,欢迎各位看官评论区留下的你的见解!

觉得有收获的同学欢迎点赞,关注一波!

good

往期文章

文章分类
前端
文章标签