解析白屏和FOUC

1.到底什么是白屏什么是FOUC

白屏与无样式内容闪烁(FOUC)是因为不同浏览器加载与显示页面的机制不同而造成的。

  • FOUC:一些浏览器例如firefox,页面加载时,页面以样式A进行渲染,页面加载完成时,页面突然以样式B进行渲染,所以导致页面出现页面内容闪烁。
  • 白屏:一些浏览器例如chrome,他的加载和渲染机制是等css全部加载解析完后再渲染展示页面,而这个等待的时间就为白屏。

2.为什么会出现白屏和FOUC

  • FOUC

firefox浏览器:当我们输入网址按回车后浏览器会向服务端发送请求,然后服务端发送页面给浏览器,浏览器边下载页面边解析边渲染。下面我们解剖一下边下载页面边解析边渲染的过程:

  1. 边下载边解析就是边下载html边构建DOM Tree;
  2. 浏览器会以浏览器内置样式(user agent stylesheet)来解析CSSOM Tree;
  3. DOM Tree + CSSOM Tree 构建出 渲染树(Render Tree),然后页面内容渲染出来;
  4. 当解析到内联样式(inline-stylesheet)和内部样式(internal stylesheet)时,马上刷新DOM Tree + CSSOM Tree + 新的CSSOM 会发生变化引起 Render Tree变化。
  5. 当解析到外部链接样式(external stylesheet)是会就先加载,然后如同inline-stylesheet和internal stylesheet那样解析和刷新CSSOM Tree和Render Tree了。

上述步骤5中由于样式文件存在下载这个延时不确定的阶段,因此网络环境不好或样式资源体积大的情况下我们可以看到样式闪烁明显。

  • 白屏

chorme浏览器:当我们输入网址按回车后浏览器会向服务端发送请求,然后服务端发送页面给浏览器,浏览器下载完成后页面解析渲染。下面我们解剖一下边下载页面边解析边渲染的过程:

  1. 根据来自服务器端的 HTML 代码形成DOM Tree;
  2. 加载并解析全部样式,形成 CSSOM Tree;
  3. 在DOM Tree + CSSOM Tree构建一棵由一组待生成渲染的渲染树(在 Webkit 中这些对象被称为渲染器或渲染对象,而在 Gecko 中称之为“frame”。)渲染树反映了文档对象模型的结构,但是不包含诸如 <head> 标签或含有display:none属性的不可见元素。在渲染树中,每一段文本字符串都表现为独立的渲染器。每一个渲染对象都包含与之对应的 DOM 对象,或者文本块,还加上计算过的样式。换言之,渲染树是一个文档对象模型的直观展示。
  4. 对渲染树上的每个元素,计算它的坐标,称之为布局。浏览器采用一种流方法,布局一个元素只需通过一次,但是表格元素需要通过多次。
  5. 最后,渲染树上的元素最终展示在浏览器里,这一过程称为“painting”。

上述步骤5中由于样式文件存在下载这个延时不确定的阶段,因此网络环境不好或样式资源体积大的情况下我们等待的时间就为白屏。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,809评论 1 92
  • 1. CSS和JS在网页中的放置顺序是怎样的?CSS必须是在html之前载入,所以放在head标签里。JS放在CS...
    好好顽阅读 81评论 0 0
  • 1. CSS和JS在网页中的放置顺序是怎样的? css放在head标签内,防止渲染时出现白屏 js放在最后body...
    billa_8f6b阅读 588评论 0 0
  • 04年一首七里香,循环在大街小巷,电线杆上的麻雀,那个夏天,那温暖的阳光,周杰伦这三个字刻入了我的脑海。 那年,我...
    漠然六月檬儿阅读 604评论 2 2
  • 我的宝贝女儿叫赵芯艺,音同心意。 自从你来到这个世界,爸爸一直在努力的去告诉你我有多爱你,也无数次因为你成长过程中...
    一芯一艺Cindy阅读 472评论 0 2