- 首先浏览器主进程接管,开了一个下载线程。
- 而后进行HTTP请求(DNS查询、IP寻址等等),中间会有三次捂手,等待响应,开始下载响应报文。
- 将下载完的内容转交给Renderer进程管理。
- Renderer进程开始解析css rule tree和dom tree,这两个过程是并行的,因此通常我会把link标签放在页面顶部。
- 解析绘制过程当中,当浏览器遇到link标签或者script、img等标签,浏览器会去下载这些内容,遇到时候缓存的使用缓存,不适用缓存的从新下载资源。
- css rule tree和dom tree生成完了以后,开始合成render tree,这个时候浏览器会进行layout,开始计算每个节点的位置,而后进行绘制。
- 绘制结束后,关闭TCP链接,过程有四次挥手。
以及为何CSS和JS的位置会影响页面效率css
css在加载过程当中不会影响到DOM树的生成,可是会影响到Render树的生成,进而影响到layout,因此通常来讲,style的link标签须要尽可能放在head里面,由于在解析DOM树的时候是自上而下的,而css样式又是经过异步加载的,这样的话,解析DOM树下的body节点和加载css样式能尽量的并行,加快Render树的生成的速度。浏览器
js脚本应该放在底部,缘由在于js线程与GUI渲染线程是互斥的关系,若是js放在首部,当下载执行js的时候,会影响渲染行程绘制页面,js的做用主要是处理交互,而交互必须得先让页面呈现才能进行,因此为了保证用户体验,尽可能让页面先绘制出来。缓存