基于事件驱动 非阻塞异步编程
同步&异步解释:去邻居家敲门,人不在,一直在门口等待邻居回来,这就是同步的;去敲门,人不在,留下一个消息就走了,邻居回来看到消息,打电话给你,你再去,这就是异步。
运行结果与浏览器端的控制台一致,因为它与Chrome的底层都是基于V8
node中没有windows的全局变量,但是它有global,process,console,require(),module,exports,setTimeout,clearTimeout,setInterval,clearInterval
1.Node.js基础
1.1 内置模块
即无需引入依赖,就可以使用的库。
比如:fs,path, http/https, until
例子:使用path模块
1 | // 使用require加载模块 |
例子:使用http模块
1 | // 使用http内置模块 |
1.2 常用第三方库
非常非常丰富,每天都有几千万的下载量,可靠好用
比如:lodash, express, koa,Moment,Day.js,DEBUG,request, axios
express, koa是两个非常老牌的第三方http库,12年以前常用exress,12年以后逐步用koa
Moment,Day.js是两个处理时间转化的库,开始用Moment,近期用Day.js
1.3 Npm
全称Node Package Manager,是标准的原生态包管理工具
yarn与npm是两个最好的模块安装工具,npm使用的人数更多,因为npm是node自带的,安装node后就同时安装了npm
- 使用Common.js规范可以将多个文件运行起来
1 | // a.js |
1.4 express vs koa
国内koa居多,世界范围内express居多
koa优势
支持ES6
文件只有4个
koa使用
1
2
3
4
5// koa 使用
const koa = require('koa')
const app = koa()
app.listen(3000)koa本质:由core加上一堆中间件组成,路由就是其中一种中间件
中间件(Web Middleware):处理HTTP请求的函数,用来完成各种特定的任务,比如检查用户是否登录、分析数据。最大特点就是,一个中间件处理完,再传递给下一个中间件。
koa最大的特点是在于它的中间件,是一个async中间件,而且跟传统的async不一样,不是A到B,B到C。它的执行过程是洋葱模型,当执行到最里面的时候,它的response执行完会回来,会从最后一个中间件返回到第一个中间件,类似退栈过程。比传统中间件更高效
比如:计算执行时间
传统中间件:在第一个路由里初始化时间,最后一个执行的路由里埋一个最终时间,两者相减,需要把数据从a带到最后。
koa的话,就不需要,因为它进出都是自己。
一个有意思的例子:
1 | // 洋葱模型 进出都是自己 |
1.5 async
传统的异步编程手段:co,function *, thunk, async/await, promise
(async/await是最新的,是promise的语法糖)
之前Node.js被人诟病的就是回调地狱callback hell
1 | // 回调地狱 callback hell |
但是在ES6之后 ,出现 yield generator 还有co去包裹函数的形态,最终解决方案还是promise
1.6koa中间件
常见中间件:koa-bodyparse, koa-ejs, koa-router
2. Node.js Serverless & 拓展
什么是Serverless
几乎没人知道怎么落地Serverless;
但是大家都觉得其他人在大力做Serverless;
所以大家都宣称自己在做Serverless
发展角度
为了保证开发环境的正确性,想出一系列的隔离方式。
从最早的物理服务器(裸机)–> 虚拟化 –> 云计算 –> 容器技术 –> Serverless
抽象程度越来越高,原因是如果要部署一个应用,我希望关心的是其本身,而不是运维。
Serverless特性
Hostless
不绑定一个主机,基于云服务器
Elastic
弹性,自动扩容缩容
Stateless
无状态,随时启动销毁
Event-driven
事件驱动,不同事件对应不同函数,不同函数完成不同功能
Lego Blocks
乐高组合
High Availability
高可用
Usage-based Cost
按量付费
案例
- web应用访问CDN(内容分发网络)
- 视频转码
- web应用访问CDN(内容分发网络)
Javascript在服务端的新进展
更多全栈框架的出现
16,17年出现的Next.js(基于React) 和 Nuxt.js(基于Vue)
近期不久出现Remix(前端后端混在一起写)渲染容器从端到云再到边
用户访问cdn节点中存在loading,找到服务器之后拉取页面,返回的数据也需要去服务器拉取,中间也存在loading。因此在传统服务端渲染的情况下,会存在很多loading。出现在服务端做更多事情的思考
出现了SSR服务端渲染,像Java的JSP,Vue/React做的Server Side Rendering(SSR)原理都是类似的。将页面渲染的工作搬到服务端,实现了ssr服务渲染功能。
出现问题,人服务器不在同地
中间需要跨多个服务器,整个过程延时非常严重,ssr也有压力
出现SSG静态页面生成,可以在服务端生成页面去推送到CDN
出现Edge 边缘计算渲染