Node.js 的十八般武艺

213 阅读4分钟

  这里主要介绍下 Node.js 能做什么,尝试提高大家对 Node.js 的兴趣。

一、初入山门

基于事件驱动的、单线程的异步 I/O 架构

  平常我们说 node、Node.js,其实两者的区别不大,我个人理解为:

  • node 是 JavaScript 的一个运行时环境(runtime)
  • Node.js 是可以在服务端执行 JavaScript 的代码平台

  运行时环境是指一个服务想要运行必须依赖的服务,类似运行 Java 需要安装 JDK,JDK 内就包含了 Java 的运行时环境。JavaScript 是网页的脚本语言,依赖浏览器的 JavaScript 引擎,基于 node 可以让 JavaScript 脱离浏览器的限制,运行在服务端,这是因为 node 集成了 Google 的 V8 引擎对 JavaScript 进行解释。

  Node.js 的出现,让我们应该将 JavaScript 和 PHP、Python、Java 等其他编程语言同等对待,不应该将 Node.js 视为小工具。

1.1、Node.js 的特点

  为什么说 Node.js 天生异步呢?因为 Node.js 的设计思路就是如此。

  Node.js 的异步 I/O 能力是依赖 Libuv 实现的。例如:同时写入一百张图片,Node.js 可以借助 Libuv 同时写入,而不用一张一张写入。

Libuv 官网:libuv.org/

V8 引擎让 Node.js 运行高效。

1.2、为什么是 Node.js

  • 写应用比较快,可以快速实现自己的灵感,锻炼设计的能力,平常写一些小工具很不错。
  • 前端都会 JavaScript。

二、十八般武艺

1、Web 服务

  作为前端程序员,在多次吐槽后端数据结构不合理之后,可能就会身临其境的把自己代入后端的角色,自己给接口时,数据会如何如何设计。现在好了,前端借助 Node.js 可以绕过后端实现自给自足。

  常见的框架有:Express、Koa2、Egg、Midway 等,持久化一般使用 MySQL、MongoDB、Redis、GraphQL 等。

举例:哆啦A梦、基于 JSON 文件的 API(节假日接口)

2、Web聊天室(IM)

基于 Socket.io 实现,可以实现实时通讯

3、爬虫

基于 Cheerio、request 实现,可以解析目标网页的 DOM 结构

举例:哆啦A梦文章订阅、UED Landing 页专栏部分豆瓣电影 Top250

4、本地代理

基于 http-proxy 实现,监听本地端口后转发,可同时监听多个本地端口

举例:本地代理

5、博客

基于 Hexo 实现,建议一个静态的个人博客网站

举例:liuxianyu.cn

6、Web 论坛

基于 node-club 实现,使用了 Node.js 和 MongoDB,页面简洁,功能丰富

举例:cnodejs.org/

7、Web 幻灯片

基于 Cleaver 实现,可以将 markdown 文件生成演示文稿

举例:github.com/jdan/cleave…

8、SSR

服务端渲染

举例:袋鼠云官网、UED Landing 页

9、基础工具

开发各类 npm 包

举例:ko、常见的前端框架脚手架

10、I/O 密集型应用

开发 I/O 密集型的服务,流服务器等

举例:网盘相册缩略图处理、文件格式转换

11、BFF

Backend For Frontend,服务前端的后端

举例:前端从三个地方获取数据,这时就可以基于 BFF 设计,在逻辑上进行分层,统一获取数据后返回给前端,也可以称之为数据整合

12、Serverless、Microservices

无服务架构;微服务,小型服务,独立进程,编程语言不限。借助于 Node.js 的轻量,可以快速实现

13、人工智能

人脸识别,加上圣诞帽

举例:github.com/hk029/chris…

14、与硬件交互

通过 websocket 和 serialport 实现对硬件的控制

举例:github.com/liuxy0551/n…

15、桌面端应用

举例:Electron、VScode

16、客户端 APP

使用 node-webkit 将 Web 页面打包成 APP

举例:github.com/nwjs/nw.js

17、操作系统

node-os

举例:node-os.com/

18、你的想象力

三、行走江湖

1、了解服务端的伙伴

学习了 Node.js 后,你会了解到后端伙伴的输入输出是什么。在日常一些场景中,你会发现自己做过或思考过,那和后端的伙伴合作会有一定的效率提升。无法要求后端更了解前端,那只能更靠近后端。

比如在技术方案讨论时,哪些事情由后端来做更合适,而不是听之任之,不合理的地方可以及时提出,保证项目顺利推进。在 battle 时,了解服务端和不了解服务端,将是两种不同的状态和结果。

在这里 Node.js 不是必要条件,需要真正学习的是后端的一些思维。

2、承担更多工作

前端只能写页面吗,后端只能写接口吗?当然不是这样。

前端部门的所有接口不可能都等待后端提供,其他团队的页面也不可能都等前端来实现,一些工具性、或业务复杂度不高的,应该在部门内闭环,这样会解耦部门间非业务必要的关联,也就提高了工作效率。