客户端容器 | 青训营笔记

123 阅读3分钟

一、 浏览器架构

1-1 浏览器架构演进

1.单进程架构:所有模块运行在同一个进程里,包含网络、插件、JavaScript运行环境等
2.多进程架构:主进程、网络进程、渲染进程、GPU进程、插件进程
3.面向服务架构:将原来的UI、数据库、文件、设备、网络等,作为一个独立的基础服务

浏览器架构.png

1-2 浏览器架构特点

对比.png

1-3 多进程分工

分工.png

1-4 渲染进程-重点

1-4-1 多线程架构

多线程.png

1-4-2 JS引擎VS渲染引擎

1.解析执行JS
2.XML解析生成渲染树,显示在屏幕
3.桥接方式通信(它们是独立)

引擎.png

1-4-3 多线程流程

1.网络线程负责加载网页资源(资源包含HTML源码和CSS源码)
2.JS引擎解析JS脚本并且执行
3.JS解析引擎空闲时,渲染线程立即工作
4.用户交互、定时器操作等产生回调函数放入任务队列中
5.事件线程进行循环,将队列里的任务取出交给JS引擎执行(将任务队列中的有关页面的改变的操作和事件取出,给JS引擎去执行,渲染引擎与JS引擎通过Bridge连接)

流程.png

二、Chrome浏览器运行原理

1.浏览器输入地址之后

1.浏览器的地址栏输入URL并按下回车。
2.浏览器查找当前URL是否存在缓存,并比较缓存是否过期。
3.DNS解析URL对应的IP。
4.根据IP建立TCP连接(三次握手)。
5.HTTP发起请求。
6.服务器处理请求,浏览器接收HTTP响应。
7.渲染页面,构建DOM树。
8.关闭TCP连接(四次挥手)。  

三、前端优化手段

1. 首屏优化

1.压缩、分包、删除无用代码(构建将代码压缩,做一个单页将代码分包)
2.静态资源分离(静态资源最好是放在CDN上面,与服务进行分离,如果是同源加载默认带上cookie,速度变慢)
3. JS脚本非阻塞加载(JS放在body的底部)
4.缓存策略(常缓存)
5.SSR(前端渲染)
6.预置loading、骨架屏(防止白屏)

2. 渲染优化

1.GPU加速
2.减少回流、重绘
3.离屏渲染(非离屏渲染)
4.懒加载

3. JS优化

1.防止内存泄漏(全局变量,严格模式可以检测,DOM的引入,定时器)
2.循环尽早break
3.合理使用闭包
4.减少Dom访问
5.防抖、节流
6.Web Workers

四、跨端容器

1.为什么要跨端

1.开发成本、效率
2.一致性体验
3.前端开发生态

2.跨端方案

2-1 跨端容器 webview

2-1-1 作用

  1. Webview,即网页视图,用于加载网页Url,并展示其内容的控件
    2.可以内嵌在移动端App内,实现前端混合开发,大多数混合框架都是基于Webview的二次开发;比如lonic、Cordova。

2-1-2 优点

1.一次开发,处处使用,学习成本低
2.随时发布,即时更新,不用下载安装包
3.移动设备性能不断提升,性能有保障
4.通过JSBridge和原生系统交互,实现复杂功能

2-2 小程序

1.微信、支付宝、百度小程序、小米、直达号
2.渲染层-webview
3.双线程,多webview架构
4.数据通信, Native转发

2-3 ReactNative/Weex

1.原生组件渲染
2.React/Vue框架
3.virtual dom
4.JSBridge

2-4 Lynx

1.Vue
2.JS Core / v8
3.JSBinding
4.Native UI / Skia

2-5 Flutter

1.wideget
2.dart vm
3.skia图形库

2-5 通用原理

1.UI组件
2.渲染引擎
3.逻辑控制引擎
4.通信桥梁
5.底层API抹平表现差异