[第5课-客户端容器|青训营笔记]

136 阅读5分钟

5-客户端容器

一、消息

  1. 可以致力于的项目:视频直
  2. carvas:画图软件

二、课程简介

  1. web浏览器以及跨端解决方案
  2. 浏览器架构和运行原理

三、知识

(一)浏览器架构

  1. 浏览器架构分类

    1. 单进程架构
    2. 多进程架构
    3. 面向服务架构
  2. 浏览器架构对比

    架构类型扩展性安全性流畅度
    单进程架构卡顿
    多进程架构流畅
    面向服务架构流畅
  3. 常见浏览器内核

    Trident、Gecko(Firefox)、Webkit(Chrome、Android)、Blink(Chrome)、Edge(Edge)、Tridenet+Webkit+Blink(国内浏览器)

  4. JS引擎VS渲染引擎

    image-20230422145700099

(二)渲染进程-多进程渲染线程

  1. 资源加载:加载HTML文档和子资源

  2. 构建渲染树

    1. 构建Dom树
    2. 构建CSSOM树
    3. 合成渲染树
  3. 页面布局

    1. 根据渲染树计算每个节点的位置和大小
    2. 在浏览器页面区域绘制元素边框
    3. 遍历渲染树,将元素以盒模型的形式写入文档流
  4. 页面绘制

    1. 构建图层
    2. 绘制图层:一个图层——>多个绘制指令——>绘制列表——>交给合成线程
    3. 合成线程生成图块
    4. 栅格线程将图块进行栅格化
    5. 展示

(三)Chrome运行原理

  1. Chrome运行原理-开始导航

  2. Chrome运行原理-读取响应

  3. Chrome运行原理-寻找渲染进程

    1. 网络线程做完所有检查后,会告知主进程数据已准备完毕,主进程确认后为这个站点寻找一个渲染进程

    2. 主进程通过lIPC消息告知渲染进程去处 理本次导航

    3. 渲染进程开始接收数据并告知主进程自 己已开始处理,导航结束,进入文档加载阶段

      image-20230422151034928

(四)优化

  1. 前端性能Performance

    1. 时间花在哪儿
    2. 什么情况下卡顿
  2. 首屏优化

    1. 压缩、分包、删除无用代码
    2. 静态资源分离
    3. JS脚本非阻塞加载
    4. 缓存策略
    5. SSR
    6. 预置loading、骨架屏
  3. 渲染优化

    1. GPU加速
    2. 减少回流、重绘
    3. 离屏渲染
    4. 懒加载
  4. JS优化

  5. 防止内存泄漏

  6. 循环尽早break

  7. 合理使用闭包

  8. 减少Dom访问

  9. 防抖、节流

  10. Web Workers

(五)跨端容器

  1. 为什么要跨端?

    答:成本低、效率高

  2. 跨端方案(跨端容器)

    1. webview
    2. 小程序
    3. RN/Weex
    4. Lynx
    5. Flutter
  3. webview

    1. 定义:网页视图,加载网页Url,并展示其内容的控件

    2. 与Native通信

    3. 实现简易的JSBridge

      1. interface CallArgs与interface ResponseArgs对应
  4. 小程序

    image-20230422153626565

    1. 都要通过Native进行转发渲染
  5. React Native/Weex

  6. Lynx

    1. 性能比JSBrodge高很多
  7. Flutter

    1. widget:基础组件
    2. dart vm:语言运行虚拟环境
    3. skia图形库:渲染时通过这个库,在各端表现一致
  8. 通用原理

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

    image-20230422154024486

  9. 方案对比

    image-20230422154116250

    1. webview:入手比较容易:

      1. 不涉及“客户端”等一些概念;大部分(啥)都能开发;
      2. 多端兼容
      3. 开发成本低
    2. Flutter:学习成本最高

      1. 要学习一门新的语言

(六)总结——思维导图

image-20230422154744612

三、思考

  1. 单进程哪儿哪儿不好,为什么会有单进程架构?

    答:硬件限制,内存昂贵。没有多进程架构的框架,节约资源。

  2. 面向服务架构是否会替代多进程架构?

    答:会。性能好,大部分为面向服务架构;若性能不好,可以退化为多进程。

  3. 同样是webview渲染,为什么小程序体验比webview流畅

    答:离线缓存(访问的资源都是本地的);危险操作(DOM)封死了

  4. 未来的跨端方案会是什么?

    答:竟然没讲

四、题目

image-20230422145843482

image-20230422145951580

(面试官爱问)

五、实际体会

  1. 用户在url框输入内容时,UI线程会判断输入的是URL地址还是query

    1. URL:请求站点资源
    2. query:将输入发送给搜索引擎

image-20230422150117865

  1. Chrome运行原理-开始导航

    1. 当用户按下回车,UI线程通知网络线程 发起一个网络请求,来获取站点内容
    2. 请求过程中, tab处于loading状态

image-20230422150453839

  1. Chrome运行原理-读取响应

    网络线程接收到HTTP响应后,先检查 响应头的媒体类型(MIME Type)

    1. 如果响应主体是一个HTML文件,浏览 器将内容交给渲染进程处理
    2. 如果拿到的是其他类型文件,比如Zip、 exe等,则交给下载管理器处理