各种名词
性能优化
- 提升运行效率
- 降低运行开销
代码副作用
代码副作用是函数式编程的概念,指的是调用函数时处理函数返回值外,在代码执行中途处理额外逻辑,例如:
- 数据修改
- 变量修改
- mutable 数据结构修改
- 使用了 I/O
- 数据获取操作
- 数据写入操作
- DOM 操作
- 引发异常或中止错误
- 添加事件订阅
- 打印日志
- 引入CSS,Polyfill文件等
和副作用对应的是纯函数(在给定相同的输入的情况下,它将始终返回相同的结果),副作用的缺点是:
- 副作用可能依赖上下文环境,导致函数式不可测的
- 副作用可能会产生额外影响,
mutable & immutable
immutable 创建之后不能被修改,对应 JavaScript 的基本类型 mutable 创建之后可以被修改,对应 JavaScript 的引用类型
注意以上说的的基本类型和引用类型并不是指变量,而是只变量对应的实际对象。 例如一个对象的内部变量是可以被修改的,表面上看这个对象并没有变,实际其内部已经改变,我这种情况为 mutable。反之如果是数字类型,这个对象一旦被创建就不能被修改,对变量修改实际是创建新的对象并引用。
let person = {
name: "Harry",
age: 22,
};
let clonePerson = person;
person.name = "John";
console.log(clonePerson.name); // 'John'
序列化&反序列化
- 序列化:对象转换为可传输的字节序列
- 反序列化:把字节序列转换为对象
TODO:声明式和命令式
- 命令式:强调如何做
- 声明式:强调做什么,通过函数的封装提升代码可读性
const arr = [1, 2, 3];
// 命令式
for(let i of arr) {
console.log(i);
}
// 声明式
const forEach = function(arr, callback) {
for(let i of arr) {
callback(i);
}
}
forEach(arr, console.log);
进程(Process)和线程(Thread)
程序在启动的时候会创建一个进程,程序也可能会创建线程来帮助它工作。操作系统为进程提供了一块“内存块”以供使用,并且所有应用程序状态都保存在该私有内存空间中。当关闭应用程序时,该进程也会消失,操作系统会释放内存。
- 一个进程由一个或多个线程构成,进程内的线程共享资源(内存),线程之间相互独立
- 进程是 CPU 资源分配的最小单位
- 线程是独立在进程基础上的一次程序运行单位
TODO:内聚&耦合
XaaS & ServerLess
- IaaS(Infrastructure as a Service)基础设施服务
- 提供底层硬件服务,开发者无需关心服务器硬件
- 代表产物:虚拟机、Docker
- PaaS(Platform as a Service)平台服务,软件部署平台
- 提供 runtime,可以无缝扩展,开发者只需要关注业务逻辑,不需要关注底层依赖
- 代表产物:云服务(云存储、云数据库等)、中间件服务
- SaaS(Software as a Service)软件服务
- 将软件的开发、管理、部署都交个第三方,自己不需要关心技术问题
- 代表产物:npm, dockerhub 等,通过注册账号就可以享受产品服务
开发者需要关心的部分

从 IaaS 到 PaaS

微服务
TODO:微服务 -> FaaS ≈ ServerLess
Serverless 不是“无服务器” 而是由云计算服务商负责运维工作,以服务的方式为开发者提供数据库、消息、身份验证等功能。开发人员只需要关心业务代码。
从 IaaS 到 FaaS—— Serverless 架构的前世今生 从后端架构演化史到云原生,一文解读云原生架构!