动态增加图片,那页面加载时间应该怎样算

动态增加图片,那页面加载时间应该怎样算

页面加载时间,具体表现跟浏览器的加载状态有关,什么时候浏览器加载状态结束,页面就加载完成。

一个页面加载时间,包括在第一次请求又带去的请求,包括图片,css, script,其中,css, script 会影响加载 dom 时间,会阻塞 dom 解析直到 css 和 script 下载完,它们会影响 DOMContentLoaded 的时间.

而图片,不影响 dom 时间,但却影响 page load 时间。

如果:lasyLoad 加载图片,如果我们把脚本放在后面,当页面可见时,lasyLoad 生效,这时图片会影响页面的加载时间,不会影响 dom 时间。

那么倒底什么时候,通过脚本修改 img 对象的 src 属性下载图片的时间,不算在 load 事件中呢?

我做了以下试验,代码如下:

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>页面性能收集信息上报的demo</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="generator" content="nico 0.5.1" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <script>
        window._perfEnable_ = true;
    </script>
</head>
<body style="height:2000px; scroll:auto">

<a >
    <img src="http://img13.static.yhbimg.com/goodsimg/2016/04/23/07/02096525430e4340f60f23eb386ed54e90.jpg?imageView/2/w/235/h/314" style="display: block;">
</a>

<img id="ok">

<script>
    // 算在 load 时间中
    var a = document.getElementById('ok');
    a.src = 'http://img3.redocn.com/20130721/Redocn_2013072117021023.jpg';

    // 算在 load 时间中
    setTimeout(function() {
        var a = document.getElementById('ok');
        a.src = 'http://img3.redocn.com/20130721/Redocn_2013072117021023.jpg';
    }, 0);

    // 如果短于 'DOMContentLoaded', 算在 load 时间中
    setTimeout(function() {
        var a = document.getElementById('ok');
        a.src = 'http://img3.redocn.com/20130721/Redocn_2013072117021023.jpg';
    }, 2000);

    // 如果长于 'DOMContentLoaded', 算在 load 时间中
    setTimeout(function() {
        var a = document.getElementById('ok');
        a.src = 'http://img3.redocn.com/20130721/Redocn_2013072117021023.jpg';
    }, 11000);

    // 算在 load 时间中
    window.addEventListener('DOMContentLoaded', function() {
        var a = document.getElementById('ok');
        a.src = 'http://img3.redocn.com/20130721/Redocn_2013072117021023.jpg';
    });

    // 不算在 load 时间中
    window.addEventListener('load', function(ev) {
        var a = document.getElementById('ok');
        a.src = 'http://img3.redocn.com/20130721/Redocn_2013072117021023.jpg';
    })

</script>

<script src="perf.js"></script>
</html>

代码中的注释也很清楚了,只在你的加载图片代码出现在 DOMContentLoaded 事件发生之前,都会被计算成 load 的时间.

那对于我来说, lasyLoad 的首屏加载图片时间是算 load 的时间,而没有加载的图片就不算.

原文地址:https://www.cnblogs.com/htoooth/p/9037068.html