编程范式
1.C:“中级语言”,过程式语言代表
(1)可对位,字节,地址直接操作 (2)代码和数据分离倡导结构化编程 (3)功能齐全:数据类型和控制逻辑多样化
2.编程语言:机器语言,汇编语言,中级语言(——面向过程代表——C),高级语言
高级语言:(1)面向对象代表——C++ (2)函数式代表——lisp (3)多范式代表——JavaScript
3.编程范式:(1)命令式:1.面向过程 2.面向对象 (2)声明式:1.函数式 2.响应式
4.过程化编程:(1)自顶向下 (2)结构化编程
5.面向对象编程:(1)关联数据和算法 (2)无需重写的情况下进行功能扩充 (3)不同结构可以进行接口共享,进而达到函数复用 (4)去除代码耦合
6.面向对象编程:单一职责原则;开放封闭原则;里式替换原则;依赖倒置原则;接口分离原则;
7.函数式编程中纯函数的优势:可缓存,可移植,可测试,可推理,可并行
8.函数组合规则:(1)compose(f,compose(g,h))=compose(compose(f,g),h) (2)compose(map(f),map(g))=map(compose(f,g))
9.函数中的functor:可以当作容器的类型,类型支持对容器内元素进行操作 Monad:可以去除嵌套容器的容器类型 Applicative:可直接对两个容器进行操作
10.响应式编程:异步/离散的函数式编程 (1)数据流 (2)操作符(合并,过滤,转化,异常处理,多播)
11.领域特定语言DSL:lexer,parser,tools,visitor
12.SQL Token:注释,关键字,操作符,空格,字符串,变量
客户端容器
1.浏览器架构:(1)单进程架构:所有模块运行在同一个进程里,包括网络,插件,JavaScript运行环境等 (2)多进程架构:主进程,网络进程,渲染进程,GPU进程,插件进程 (3)面向服务架构:将原来的UI,数据库,文件,设备,网络等,作为一个独立的基础服务
2.扩展性,安全性,稳定性,流畅度:单进程架构<多进程架构<面向服务架构
3.进程分工:
(1)浏览器(主进程):主要负责页面展示逻辑,用户交互,子进程管理;包括地址栏,书签,前进,后退,收藏夹等
(2)GPU进程:负责UI绘制,包括整个浏览器全部UI
(3)网络进程:网络服务进程,负责网络资源加载
(4)标签页(渲染进程):控制tab内的所有内容,将Html,Css和JavaScript转换为用户可交互的网页
(5)插件进程:控制网站进行的插件,比如flash,ModHeader等 (6)其他进程
4.渲染进程:js引擎线程,GUI渲染线程,定时器线程,事件线程,网络线程 (js引擎与GUI互斥)
5.渲染进程—多进程工作流程:(1)网络线程辅助加载网页资源 (2)JS引擎解析JS脚本并且执行 (3)JS解析引擎空闲时,渲染线程立即工作 (4)用户交互,定时器操作等产生回调函数放入任务对列中 (5)事件线程进行事件循环,将队列里的任务取出交给JS引擎执行
6.浏览器地址输入URL后浏览器主进程为: 输入处理——开始导航——读取响应——寻找渲染进程 渲染进程:资源加载——构建渲染树(HTML文本转化为DOM树,CSS代码转化为CSSOM树)——页面布局——页面绘制
7.前端性能优化
首屏优化:(1)压缩,分包,删除无用代码(2)静态资源分离(3)JS脚本非阻塞加载 (4)缓存策略(5)SSR(6)预置loading,骨架屏
渲染优化:(1)GPU加速(2)减少回流,重绘(3)离屏渲染(4)懒加载
JS优化:(1)防止内存泄漏(eg.自动封装一个定时器)(2)循环尽早break(3)合理使用闭包(4)减少Dom访问(5)防抖,节流(6)Web Workers
8.跨端容器 跨端方案:WebView,小程序,RN/WeeX,Lynx,Flutter WebView:用于加载网页Url,并展示其内容的控件
9.通用原理:(1)UI组件(2)渲染引擎(3)逻辑控制引擎 (4)通信桥梁(5)底层API抹平表现差异