zoukankan      html  css  js  c++  java
  • 浏览器加载渲染HTML、DOM、CSS、 javascript、image、flash、iframe、src属性等资源的顺序总结


    页面响应加载的顺序:
     
    1、域名解析->加载html->加载js和css->加载图片等其他信息
      DOM详细的步骤如下:
    1. 解析HTML结构。
    2. 加载外部脚本和样式表文件。
    3. 解析并执行脚本代码。
    4. 构造HTML DOM模型。
    5. 加载图片等外部文件。
    6. 页面加载完毕。
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Title</title>
        <style type="text/css">
            body
            {
                font-sie: 12px;
            }
        </style>
        <link href="style.css" rel="stylesheet" type="text/css" media="all" />
        <script src="js.js" type="text/javascript"></script>
    </head>
    <body>
        <div>
            <script type="text/javascript">
                function f1() { }
            </script>
            <img src="1.gif" />
        </div>
        <script type="text/javascript">
            function f2() { }
        </script>
    </body>
    </html>

    上面代码的加载解析顺序为:?

     html → head → title → #text(网页标题) → style → 加载样式 → 解析样式 → link → 加载外部样式表文件 → 解析外部样式表 → script → 加载外部脚本文件 → 解析外部脚本文件 → 执行外部脚本→body → div → script → 加载脚本 → 解析脚本 → 执行脚本 → img → script → 加载脚本 → 解析脚本 → 执行脚本 → 加载外部图像文件 → 页面初始化完毕

     jquery的Dom Ready方法在加载图片等其他信息前就可以操作Dom了,先于window.onload事件触发前执行。 

    2、<script>标签很方便,只要加入网页,浏览器就会读取并运行。但是,它存在两个严重的缺陷。 

      (i)严格的读取顺序(js各段代码的依赖性问题)

      (ii)性能问题

        浏览器采用"同步模式"加载<script>标签,也就是说,页面会"堵塞"(blocking),等待javascript文件加载完成,然后再运行后面的HTML代码。当存在多个<script>标签时,浏览器无法同时读取,必须读取完一个再去读取另一个,造成读取时间大大延长,页面响应缓慢。 为了解决这些问题,可以使用DOM方法,动态加载Javascript文件。代码如下:

     
      function loadScript(url){ 
        var script = document.createElement("script"); 
        script.type = "text/javascript"; 
        script.src = url; 
        document.body.appendChild(script); 
      } 

    这样做的原理是,浏览器即时创造出一个<script>标签,然后"异步"读取Javascript文件。这样不会造成页面堵塞,但会造成另外一个问题:这样加载的Javascript文件,不在原始的DOM结构之中,因此在DOM-ready(DOMContentLoaded)事件和window.onload事件中指定的回调函数对它无效。

    3、 缩短页面load时间方法

    例如,要加载三个外部js文件jquery.js 、world.js、hello.js可以使用下面的方法,相比于在head头部引入三个<script>或者在body里面最后引入大大缩短可load的时间

     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     <html xmlns="http://www.w3.org/1999/xhtml">
     <head id="head">
            <title></title>
            <link href="Styles/Site.css" rel="stylesheet" type="text/css" />
         </head>
     <body>
        <img src="1.jpg" width="200" height="300" />
         <script type="text/javascript">
               function loadScript(url, callback) {
                         var script = document.createElement("script");
                        script.type = "text/javascript";
            
                       //IE
                        if (script.readyState) {
                               script.onreadystatechange = function () {
                                      if (script.readyState == "loaded" || script.readyState == "complete") {
                                                 script.onreadystatechange = null;
                                                callback();
                                            }
                                    }
                             } else {
                                //非IE
                               script.onload = function () {
                                       callback();
                                   }
                           }
                       script.src = url;
                        document.getElementById("head").appendChild(script);
                    }
               //第一步加载jquery类库
                loadScript("jquery/jquery-1.4.1.js", function () {
                      //第二步加载hello.js
                        loadScript("js/hello.js", function () {
                                //第三步加载world.js
                               loadScript("js/world.js", function () {
                    
                                    });
                             });
                     });
            </script>
     </body>
     </html> 

    4、当执行引擎遇到”<script>“的时候,此时页面的下载和渲染都必须等待<script>执行完毕。

    5、image、flash等资源加载顺序

      图片,flash的加载顺序和它们的出现顺序是一致的,即使在嵌套的Div里面加载的顺序也是他们出现的顺序

     6、背景图片的加载顺序

      浏览器会在把所有样式,包括外联的css文件都下载解析完成之后才开始渲染样式,而且会自动忽略会被覆盖的样式表。

      那么这给我们的一个重要启示是:在一个单纯由Html和Css组成的页面中,背景图片总是最后加载的,假若我们想要使用较小的背景图片作为占位符,用于在加载较大的图片或者Flash文件时给用户以提示,大部分时候恐怕是达不到效果的,因为背景图片有时甚至会在大图片或Flash文件加载完成之后才会被加载。当然,这里一个重要的先决条件就是“单纯由Html和Css组成的页面”,因为JavaScript会对页面元素的加载产生极大影响(见7)

    7、JavaScript会对页面元素的加载产生极大影响

      参考:http://www.cnblogs.com/dkarthas/archive/2010/07/04/1770989.html

    8、关于现代浏览器的三个注意点:

    • 定律一:资源是否下载依赖 JS 执行结果。
    • 定律二:JS 执行依赖 CSS 最新渲染。
    • 定律三:现代浏览器存在 prefetch 优化(并行下载)。

    结论:head里出现外联js,无论如何放,css文件都不能和body里的请求并行

       head里的内联js只要在所有外联css前面,css文件可以和body里的请求并行

       head里的内联js只要在任一外联css后面,css文件就不能和body里的请求并行


  • 相关阅读:
    win10 彻底删除mysql步骤
    IDEA中添加类的创建者信息
    针对标签中设置 disabled="true",$("#id").serialize()获取不到value的解决方法
    使用Vue-cli创建project遇到的坑
    Jmeter压测总结
    Java通过ssh远程连接服务器
    Django 学习笔记(一)
    Python 测试框架基础
    Python 基础&Excel操作
    Appium环境搭建及计算器小实验
  • 原文地址:https://www.cnblogs.com/liguwe/p/3956013.html
Copyright © 2011-2022 走看看