这是我参与更文挑战的第二十一天,活动详情查看:更文挑战
Node 拥有广大的 JavaScript 程序员基础,并且完全开源!因此拥有一个强大的开发者社区!依靠繁荣的社区力量,已经发展出成熟的技术体系!以及庞大的生态!
Node 被广泛的应用在
- web 服务
- 开发工作流
- 客户端应用
- ...等诸多领域
Node 在 web 服务领域接受程度是最高的,通常它被用来做一个 BFF 层,即 Backend For Frontend(服务于前端的后端) 。
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 的模型,使其轻量又高效
自由理解
Chrome 浏览器和 Node 的组件构成
-
Node 运行 JavaScript, 和 Chrome 运行 JavaScript 几乎没有不同!用的是同样的 JavaScript 引擎和模型
-
Node 主要针对服务端 没有浏览器某些 API,如
document,window.....加了许多 自身 API -
对于开发者来说,在 Chrome 里写 JavaScript 控制浏览器 Node 让我们用类似的方式,控制整台电脑
Node 的特点
异步 I/O
事件与回调函数
单线程
Node 保持了 JavaScript 在浏览器中单线程的特点。而且在 Node 中,JavaScript 与其余线程是无 法共享任何状态的。
单线程的最大好处:
不用像多线程编程那样处处在意状态的同步问题,这里 没有死锁的存在,也没有线程上下文交换所带来的性能上的开销。
单线程的弱点 具体有以下 3 方面:
- 无法利用多核 CPU。
- 错误会引起整个应用退出,应用的健壮性值得考验。
- 大量计算占用 CPU 导致无法继续调用异步 I/O。
跨平台
Node 基于 libuv 实现跨平台的架构示意图
兼容 Windows 和*nix 平台主要得益于 Node 在架构层面的改动,它在操作系统与 Node 上层模块 系统之间构建了一层平台层架构,即 libuv。目前,libuv 已经成为许多系统实现跨平台的基础组件。
通过良好的架构,Node 的第三方 C++模块也可以借助 libuv 实现跨平台。目前,除了没有保持 更新的 C++模块外,大部分 C++模块都能实现跨平台的兼容。
Node 可以用来做什么
服务端渲染
Node 被广泛得用在 web 服务领域
如:腾讯视频-- 网页现在服务端渲染,最后返回浏览器端的(在浏览器中查看源代码,如果有对应的 dom 结构,就是服务端渲染)
服务端渲染的优点
- 有利于 SEO
- 有利于首屏渲染加速
服务端渲染渲染时需要考虑, 前后端代码复用的问题
前后端同构: 即同一套代码,既可以用在后端,也可以用在前端
构建工作流
- gulp
- webpack
- ...
游戏
- wayward
客户端应用
- 比如:最流行的开发工具-VSCode
- 在已有网站的情况下需要新开发客户端应用
- 用 Node 客户端技术(
eletron) 实现,最大限度复用现有工程
最后
文章浅陋,欢迎各位看官评论区留下的你的见解!
觉得有收获的同学欢迎点赞,关注一波!