zoukankan      html  css  js  c++  java
  • 前端性能优化_css加载会造成哪些阻塞现象?

    css的加载是不会阻塞DOM的解析,但是会阻塞DOM的渲染,会阻塞link后面js语句的执行。这是由于浏览器为了防止html页面的重复渲染而降低性能,所以浏览器只会在加载的时候去解析dom树,然后等在css加载完成之后才进行dom的渲染以及执行后面的js语句。这就是造成在css下载完成之前,页面刚开始会出现白屏现象的原因。

    浏览器渲染流程:

    1. 浏览器开始解析目标HTML文件,执行流的顺序为自上而下。

    2. HTML解析器将HTML结构转换为基础的DOM(文档对象模型),构建DOM树完成后,触发DomContendLoaded事件。

    3. CSS解析器将CSS解析为CSSOM(层叠样式表对象模型),一棵仅含有样式信息的树。

    4. CSSOM和DOM开始合并构成渲染树,每个节点开始包含具体的样式信息。

    5. 计算渲染树中个各个节点的位置信息,即布局阶段。

    6. 将布局后的渲染树显示到界面上。

    51220网站目录 https://www.51220.cn

    根据以上的流程,可以知道,当cssdom还没构建完成时,页面是不会渲染到浏览器界面的,这也是为什么当css下载过慢时,会出现白屏的现象,以下是模拟白屏的例子:

    index.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    
    </head>
    <body>
        <h1>this is a test</h1>
        <link rel="stylesheet" type="text/css" href="test.css">
        <img src="1.jpg">
        <hr>
        <span>this is a test</span>
    </body>
    </html>

    test.css:

    img{
         50%;
    }

    使用fidder延迟css的响应:

    if(oSession.uriContains('test.css')){
        oSession["response-trickle-delay"] = "3000";
    }

    可以看到,在1.4s的时候,html文档和img已经下载完成,但是页面并没有渲染,而是等到css加载完成后再渲染出来,这也证实了css加载过程中会阻塞页面的渲染。所以在我们的前端日常开发中,应尽量减少css的响应时间。

  • 相关阅读:
    .html(),.text()和.val()的差异总结:
    获取或设置checkbox radio select的值
    sublime 搜索时忽略文件夹
    转载------一小时包教会 —— webpack 入门指南
    转载--git教程
    转载--网站数据统计分析中的日志收集原理及其实现
    devexpress 安装及破解
    基于socket的客户端和服务端聊天简单使用 附Demo
    Ajax技术原理小结
    oracle 资源学习汇总
  • 原文地址:https://www.cnblogs.com/ypppt/p/13055169.html
Copyright © 2011-2022 走看看