前端程序员为什么要学node.js?

前言:

近期想要学习node来开发前端工具链,想到之前自己“node.js是用来写后端”的这种狭隘看法,我觉得有必要再次梳理一下自己学习node.js的目的以及我到底可以用node.js做什么。

一、为前端提供开发工具(vue-cli,webpack等等)

首先,像webpack、vite、vue-cli这些我们平常进行工程化开发一定会使用的工具他们底层都是使用node进行开发的,但问题是,凭什么node可以做到这些?没有node为什么就做不到?

以vue-cli为例子,当我们在终端运行“vue create my-app”之后,从结果上看,vue-cli做了这些事:

自动化生成项目文件夹和具体文件(操作文件系统)下载依赖包(通过npm/yarn)配置Webpack(生成打包规则)

可以看到,如果我们要自动化生成项目文件夹和文件,就一定要操作本地的文件系统,但是如果我们没有node,我们的js脚本只能运行在浏览器,而浏览器并没有提供这种直接操作本地文件的接口(主要是安全限制),但node作为后端运行时,拥有系统级权限,就可以直接操作本地文件,也就是node内置的fs模块。

总的来说,就是因为node拥有这种系统级API(文件操作(fs)、路径处理(path)、进程管理(child_process)等模块),使工具链能直接操控操作系统,让js编写的脚本不再只作用于浏览器环境。

二、Node提供线上环境模拟

在开发过程中,我们不可能一直依赖真实的后端环境来进行前端代码的测试和调试,我们需要一个能够实时进行打包和部署的工具,模拟我们项目打包后部署在服务器上的真实访问效果,而node就能够做到。那么问题又来了,node凭什么能做到?

主要原因是我们可以通过node的核心模块“http”和“https”可以直接创建 Web 服务器,而无需依赖第三方服务(比如Nginx)。通过http.createServer(),node可以监听端口、处理请求和响应,实现与线上服务器相同的 HTTP 协议交互,并且还能依赖于node模块化机制、文件监听能力和生态工具链的协同工作实现像“热更新”的操作。

三、提供中间层服务端渲染(SSR、高流量项目)

对于一些高流量、对性能和用户体验要求极高的项目,服务器端渲染(SSR)是一种非常重要的技术手段。通过node构建中间层服务器,它能够接收用户的请求,提前在服务器端把页面的 HTML 内容渲染好,然后再发送给客户端浏览器进行展示。这样一来,用户在访问页面时,就不需要等待浏览器先下载js文件、解析执行后再动态渲染内容,从而大大缩短了页面的首屏加载时间,提升了用户体验。

像一些大型的电商网站、资讯类网站,它们为了能让用户在进入页面的瞬间就能看到丰富的内容,减少等待时间,提高用户留存率,就会采用基于node的服务器端渲染技术。对于前端程序员来说,掌握node就意味着能够参与到这种高性能架构的搭建中,提升我们开发的项目在性能方面的竞争力。