Skip to content

开篇词Node.j从工程化工具到后端服务应用的转变

你好,欢迎来到 Node.js 课程,我是清弦。

近 10 年来,我一直在一线大厂从事前端研发工作,负责前端、中台业务,以及跨端平台的研发和管理,曾经负责研发过亿级用户社交项目、千万级用户海外音视频应用平台等大型项目,同时我还自研了 Node.js 框架,为公司内部 10 多个系统项目提供支持。

现在我和我的团队,不仅用 Node.js 来做前端的工程化(即将其作为辅助工具,利用 webpack 提升前端开发效率以及保证开发质量),还用来做一部分后端开发,来发挥 Node.js 更大的价值。

在 Node.js 的应用过程中,有些问题曾经一度困扰着我:

  • 在前端,Node.js 难道只能做工程化应用吗?

  • 既然要学习后端开发,为什么我不学习其他应用更广的 Java 或者 Go?

前端为什么要选择 Node.js 来做后端开发?

作为一个前端工程师,掌握一门后端语言是很有必要的。

在小公司,通常希望你"十八般武艺,样样都懂",甚至要求你可以独立开发一个项目。当你掌握一门后端语言后,无论是独立开发还是在前端团队需要做部分后台服务的时候,你都可以主动承担这部分工作,从而在团队中凸显个人优势。

在大公司,前后端虽然分工很明确,但是团队间的协作是常态,需要跟后端人员频繁地沟通,如果你不懂后端,不考虑后台,写出来的一些代码可能是无效的,在与后台进行数据交互的时候用不了。如果你掌握了一门后端语言,不仅可以和后端同事更好地交流合作,还可以提升自己的编程能力,使自己的前端开发更合理、更有效,甚至可以写 API 调试自己的前端代码。

另外,技术栈是统一的,有时候可以前后互转,掌握一门后端语言,无可厚非可以使你的职业生涯更广阔一些

我相信每个程序员,都不会仅仅满足于当下,可能希望成为一个全栈工程师,再到技术负责人,最终能够在一家企业成为 CTO 或者实现更大的目标。而如果你仅仅掌握前端技术,那么无论如何是无法实现这些目标的。

还有一方面就是从招聘信息可以得知,掌握一门后端语言,特别是 Node.js,已经成为一个加分项。在前端竞争如此激烈的今天,甚至可以说是一个必备技能。

这时你肯定会问,我可以学习其他应用更广的 Java 或者 Go,为什么要学 Node.js 呢?

因为前端同学对 JavaScript 甚是了解,而 Node.js 是运行在服务端的 JavaScript。因此从 Node.js 去学习服务端研发技术,是最合适的选择。

从自身经历来讲,我虽然也使用过其他后端语言,比如将 PHP 或者 C++ 作为服务端渲染以及后台服务,然而在这一过程中发现了一些问题。

  • PHP 处理高并发的能力比较一般,因为多进程非常损耗服务器资源;其次 PHP 作为服务端渲染在研发方面非常低效,前端代码需要融合 PHP 代码,而现在前端也淘汰了这类技术方案。

  • C++ 作为后台服务性能虽高,但是在研发效率上是比较低的,要不断进行编译调试,根本无法跟上运营与项目需求的进度。

而基于我对 Node.js 的了解,它的一些优点,比如高并发特性以及研发高效能正好可以解决这些问题,所以最终还是回归到 Node.js

是什么阻碍了前端对于 Node.js 的进阶?

就目前来说,Node.js 应用较多的是前端工程化的部分,作为后台系统应用较少,而 Node.js 本就是后端的语言,如果只做工程化应用,会"大材小用",没能应用到它的核心特性,没能真正发挥它的最大价值。

特别是在应对一些高并发系统上,因为比较缺乏这方面的实践知识,在出现各类问题后缺少专业人才来解决这些核心问题,团队领导层方面往往基于这层考虑,并不会将 Node.js 应用在核心业务上。

在一些实际场景中,有一部分前端人员也希望应用 Node.js 来做一些后端服务应用,但在应用过程中碰到了各种问题,并且苦于没有一些专业性的文章和指导方法,他们也就浅尝辄止了。

前端在学习 Node.js 后端服务应用的过程中,存在很多技术层面的空缺,这些都阻碍了 Node.js 在工程化应用到后端服务应用的转变。

1. 核心技术点的掌握不足

关于一些技术知识,我们一般会通过官网来进行学习,但是 Node.js 官网文档提供的是核心的 API ,并没有介绍在系统设计中的核心的技术点,特别是对于前端同学来说,官网的技术文档并不能满足 Node.js 应用开发的技术能力要求

2. 关注点及流程、方法的不同

由于前端工程化和后端服务开发在关注点和流程上的差异,前端同学在学习后端服务应用的过程中,思维还是停留在原来的层面,不能一下子转变。

比如,作为后台服务的核心就是能够安全、稳定地提供服务,避免出现服务异常导致无法提供服务的问题。一旦出现这些问题,必然会影响大部分用户,恢复周期也比较长。而对于前端同学来说这点感知不深。

对于任何一端而言,性能分析和优化都是非常重要的环节,但是对于不同端性能的要求以及性能分析的方法都不同,那么如何从前端性能分析转化到 Node.js 服务端性能分析,这就是非常重要的一个技术点。

服务端研发的流程和方法与前端有着非常大的区别,前端主要基于 UI 和交互,而服务端则基于数据和数据流转。前端可以不绘制 UML 类图或者时序图,但是对于服务端研发流程来说是必需的。在这点上,前端更需要进行一些项目实践,重拾学过的知识点,才能掌握这部分技术能力的实际应用。

课程设计

鉴于以上情况,我希望通过一个系统化的课程来帮你快速掌握 Node.js 的后端服务开发,真正地应用 Node.js 来实现核心的后台业务系统。也因此,我会遵循这样几个设计思路:

  • 紧抓核心技术点:Node.js 基础知识在官网文档中比较详细,我不会赘述,而是针对性介绍服务端开发实践中重点关注的性能、安全和稳定性等方面的知识点及解决方案。当然,这也是 Node.js 相应岗位面试着重关注的点,希望能帮你积累一些面试经验。

  • 贴近项目应用场景:分别从系统的设计、研发到维护,进一步通过项目实践(通用的抢票系统和通用的投票系统),来强化你对 Node.js 服务端研发技术点和核心设计思想的掌握。

具体来讲,专栏分为核心知识点 + 技术应用分析 + 研发实战三大模块,合计 19 讲。

  • 模块一核心知识点篇:带你掌握 Node.js 服务端技术的核心知识,包括 Node.js 原理、 Node.js RESTful 服务实践、当前 3 大流行架构的对比、多进程方案、性能影响因素、CPU 过载保护方案、密集 I/O 设计思想,以及缓存的介绍和应用。

  • 模块二技术应用分析篇:在模块一的基础上,讲解和实践 Node.js 服务中最关键的几个要素,系统稳定、内存安全、网络安全和性能分析的解决方法。其次,本模块最后还会介绍一个开源工具,告诉你如何应用该工具来实现服务上线前自动化的系统安全检查。

  • 模块三系统研发实战篇:为了将本专栏的理论转化为实践,这部分则带你去实践开发一些 Node.js 服务端项目,进一步提升你对 Node.js 服务端技术的理解。本模块包含的实践项目有:RPC 服务实践、通用抢票系统、通用投票系统及当前最为流行的 Serverless。

讲师寄语

世界都在进步,为什么我在止步不前?

虽然这句话说得有点大了,但是想想,科技与技术都在不断推陈出新,那么作为程序员的我们,更不该停滞不前,未来注定会对我们要求更高。安于现状,不如持续更新自身知识结构,每次选择便是一次机会。

希望这门课,能够让你对 Node.js 的后端服务应用有一个全面的认识,从 Node.js 入门服务端研发,往全栈的方向更靠近一些,成为一名优秀的 Node.js 开发工程师。


[

](https://shenceyun.lagou.com/t/mka)

《大前端高薪训练营》

对标阿里 P7 技术需求 + 每月大厂内推,6 个月助你斩获名企高薪 Offer。点击链接,快来领取!