页面渲染过程(输入一个url)

输入一个url到网页呈现

  1. 输入网址
  2. 发送到DNS服务器,并获取域名对应的web服务器对应的ip地址。
  3. 与web服务器建立TCP连接
  4. 浏览器向web服务器发送http请求
  5. web服务器响应请求,并返回指定url数据
  6. 浏览器下载web服务器返回的数据。
  7. 解析 HTML 文件,构建 DOM 树,同时浏览器主进程负责下载 CSS 文件
  8. CSS 文件下载完成,解析 CSS 文件生成cssom树,调用JS执行引擎执行JS代码,然后将DOM树和CSSOM树结合生成渲染树。
  9. 根据渲染树来布局,计算每个节点的布局信息,将各个节点绘制到屏幕上来渲染页面,直至显示完成。

若dom树生成过程中遇到script标签,则暂停,执行js直至完成再继续生成。

若执行js时需要操作cssom,还得等css加载执行完生成cssom才能继续执行。

因此,css资源要先于js资源加载,js放于页面底部,尽量少影响dom树的生成

image

各种拓展

页面加载白屏

原因:

  • 在弱网络下,网络延迟,JS加载延迟,会阻塞页面。
  • 客户端存在bug,缓存模块错乱,不缓存js等后来挂起的文件,以及乱缓存index.html。

如果页面完全一片空白。极有可能是后端出现问题,后端配置无错误输出,并且服务状态500,这个时候页面就是一片空白。
如果是前端导致的,那么极有可能是单页应用异常,比如到了一个没有设置的新的页面。
1、打开能看到源码和request、response的浏览器,如chrome,查看源码输出
2、如果是后端问题,那么后端查看accesslog、程序日志,看看是否有问题
3、如果是前端问题,那么根据给出的js异常之类的排查

统计白屏数量:监听某个主div的变化,在规定时间内该DIV没有变化,那就可以进行白屏统计了。

监控白屏时间:监听某个主div的变化,直至页面渲染。

优化:尽量减少文件夹的嵌套,文件名不要过长。

一个网站很卡找原因

首先用3g网络测试一下:如果卡就是http请求数据可能过大。
可以合并JS脚本和CSS文件,css精灵图,对HTTP传输进行gzip压缩。
css放顶部,javascript放底部。

可能服务端出问题:
比如用户访问量大,并发量大。
mysql没有优化好,造成死锁。

可以用CDN加速把数据放在离用户更近的位置。

-------------本文结束 感谢您的阅读-------------