from 从输入 URL 到页面加载的过程?如何由一道题完善自己的前端知识体系!
作为进阶回头再来看看:从输入 URL 到页面加载完成的过程中都发生了什么事情?
整体框架
脉络
- 浏览器接收
url到开启网络请求线程- 多进程的浏览器
- 多线程的浏览器内核
- 解析
url - 网络请求都是单独的线程
- 开启网络线程发出完整的
http请求DNS查询得到IPTCP/IP请求- 五层因特网协议栈
- 服务器接收到请求到后台接收到请求
- 负载均衡
- 后台处理
- 后台与前台的
http交互http报文结构cookie以及优化gzip压缩- 长链接和短链接
http 2.0https
- 缓存问题
- 强缓存和弱缓存
- 缓存头部简介
- 头部的区别
- 解析页面流程
- 流程介绍
html解析,构建dom- 生成
css规则 - 构建渲染树
- 渲染
- 简单层和复合层
Chrome中的调试- 资源外链的下载
loaded和domcontentloaded
css可视化格式模型- 包含块
containing block - 控制框
controlling box BFCblock formatting contextIFCinline formatting context
- 包含块
js引擎解析过程- 解释阶段
- 预处理阶段
- 执行阶段
- 回收机制
例子
一些简单的例子,希望可能更加系统的回答问题
1
2
3
4
5
6
7
如何理解 getComputedStyle
普通版本:getComputedStyle 获取当前元素最终使用的 css 属性值,通过 window.getComputedStyle 等价于 document.defaultView.getComputedStyle 的调用
详细版本:window.getComputedStyle(elem, null).getPropertyValue('height') 可能值为 100px,就算是 inherit 它也会计算出来。但是如果元素背景是透明,获取的也是透明背景,不是父节点的背景,所以和展示的颜色不一定一样
更加详细:getComputedStyle 会引起回流,因为要获取祖先节点的信息进行计算,比如宽高,进一步导致性能问题。然后讲一些回流重绘的问题,还有浏览器渲染原理等等,也有其他会引起回流的操作,比如获取 offsetXXX scrollXXX clientXXX currentStyle 等等
1
2
3
4
5
6
7
8
9
visibility: hidden和display: none的区别
普通回答:一个隐藏占据位置,一个隐藏不占据位置
进一步:display: none 隐藏后不占据位置,引起 dom 树变化,引起回流,代价更大
进一步:某个元素需要频繁切换 display 的化,使用复合层优化,或者要求低一点用 absolute 让它脱离文档流,然后引导到 普通文档流,absolute 文档流,复合图层的区别
进一步:描述浏览器渲染原理和复合图层与普通图层的绘制区别(复合图层单独分配资源,独立绘制,性能提升,但是不能太多,还有隐式合成等等)
知识分类
- 核心知识,必须掌握,也是最基础的,作为骨架承载知识体系
- 浏览器模型,渲染原理,
js解析过程,js运行机制
- 浏览器模型,渲染原理,
- 重要知识
http相关,web安全相关,跨域处理
- 扩展知识
- 五层因特网协议,
hybrid模式,移动原生开发,后台相关
- 五层因特网协议,
主干流程
- 从浏览器接收
url到开启网络请求线程 (这一部分可以展开浏览器的机制,以及线程和进程的关系) - 开启网络线程到发出一个完整的
http请求(这一部分涉及到dns查询,tcp/ip请求,五层因特网协议等知识) - 从服务器接收到请求到后台接收到请求 (这一部分涉及到负载均衡,安全拦截和后台内部的处理)
- 后台和前台的
http交互(这一部分包括http头部,响应码,报文结构,cookie等知识,可以提下静态自由的cookie优化,编码解码,比如gzip压缩) - 单独拎出来的缓存问题,
http缓存(包括http缓存头部,etagcache-control等) - 浏览器接收到
http数据包后的解析流程 (解析html- 词法分析然后解析成DOM树,解析css生成css规则树,合成render树,然后layoutpainting渲染 复合图层生成GPU绘制,外链资源的处理,loadedcontentloaded) CSS的可视化模型 (渲染规则,包括块,控制框,BFCIFC等概念)js解析过程(js的解析阶段,预处理阶段,执行阶段生成执行上下文,VO,作用域链,回收机制等等)- 其他(跨域,
web安全,hybrid模式等等)
下面一步步来讲这一部分的内容
看文章遗留的问题
dns-prefetch优化- 从浏览器多进程到 JS 单线程,JS 运行机制最全面的一次梳理
- 三次握手和四次挥手更加详细的看下
- 深入理解 JavaScript 系列
- V8 内存浅析
- ajax 跨域,这应该是最全的解决方案了
- AJAX 请求真的不安全么?谈谈 Web 安全与 AJAX 的关系。