输入 url 到页面展示,发生了什么?
这是一个前端面试中经常被问到的问题,属于八股文中的一环。多数人都是在面试前通过背诵答案来解决问题。
- 渲染进程将 HTML 内容转换为浏览器可以理解的 DOM 树。
- 渲染进程将 CSS 样式转化为 CSSOM,计算出DOM节点样式,这两个过程是并行的。
- 创建布局树 layout tree,计算布局信息。
- 对布局树进行分层,生成分层树 layer tree。
- 每个图层生成绘制列表,并提交到合成线程。
- 绘制列表是记录绘制指令的列表,比如每个元素的背景、边框都是一条单独的指令。
- 合成线程将图层分成图块,并在光栅化线程池中将「图块转化为位图」(栅格化)。
- 图块:把整个浏览器分成小块,方便浏览器先加载「可视区」。
- 位图:也叫栅格图像,是由像素的单个点组成。这些点可以进行不同的排列和染色以构成图样。
- 这个过程会使用 GPU 加速。
- 合成线程发送绘制图块命令给浏览器进程。
- 浏览器进程根据命令生成页面,并显示到显示器上。
然而在所有步骤之前,其实还有一个从网上下载 CSS、JavaScript、HTML 资源的过程,这个步骤就好像高中数学题的“解:”一样,大家都知道,大家都会忘。这也正常,我们在访问页面时根本无需考虑这些资源是从服务器、CDN、还是本地缓存中(除非有对初次加载时间优化的需求)在多数情况下,我们都会将其看作一个完整的资源,只关注最终页面是否展示就好了。
分布式超媒体:互联网的集成策略
在当今互联网世界中,分布