本文为整理文,大家随意。
什么样的开发者称得上优秀呢?于我而言,能够以小见大、举一反三的开发者可谓优秀。在开发者摸爬滚打的路上要具备这些能力,除了需要打下夯实的基础外,还需要有一颗保持“好奇”的❤。关注每一步流程、关注每一处细节,你就能变强(秃)。
以前有一道在面试笔试中出现频率很高的题:请阐释一下从访问URL到页面渲染完成中间发生了什么?
从本人初级前端混子的视角看来,这道题就是一个node_modules级别的黑洞。最常见的送分背诵乞丐版就是:DNS解析->访问服务端、获取资源->浏览器构建渲染树、页面展示。
这样回答有错么?其实也没啥毛病,但是里面一旦填起坑来…顶不住顶不住。
DNS解析的具体流程
当我们在浏览器中输入url
进行访问时,DNS解析就开始了,并且不同浏览器内部实现的都不一样,这里放一个大致解析顺序的流程,传送门。
客户端与服务端的连接
根据DNS解析拿到IP后,客户端会向服务端发起TCP连接。在前面的传送门有一定的描述,但是没有实操图支撑不够形象,下面分享一篇阿里中间件团队的<<就是要你懂 TCP>>文章,非常精彩。当三次握手完毕,客户端与服务端的连接就建立了,紧接着就是我们的页面资源请求。
资源请求与页面渲染
连接建立后,会从服务端请求当前页面渲染需要的资源文件,其中包括了html
、js
、css
以及如图片等类型的静态资源。然后由浏览器的渲染引擎遵从渲染逻辑将其解析组合成渲染树,最终显示页面。理清了渲染逻辑,那些常见的重绘(repaint)、重排(reflow)所带来的问题也很好下手处理了…前阵子看到一篇<<CSS加载会造成阻塞吗>>实践文,蛮有意思的,搭配前面的渲染逻辑食用更佳。
缓存
严格意义上来讲,一个完整的URL访问流程,还要考虑缓存的存在;这其中包括了DNS的缓存(前面的DNS解析中有聊)以及各种静态资源的缓存,下面是我个人阅读体验不错的文章: