前端性能优化(二)

2019-05-05  本文已影响0人  Sommouns

首先让我们看看html的渲染过程:


image.png

我们发送请求后,服务器返回我们html文档,浏览器的parser从上而下进行token分析,一点点生成dom树,当碰到link之类的并发去请求css文件,然后同时加载CSSOM,挂载到dom上,js也是类似,从而当CSSOM和DOM渲染完后,就开始渲染树,这时候就开始渲染页面了。

HTML的渲染过程

这边顺便补充下 async 和 defer,这两种js的下载都会和html解析同时进行,只是执行的时机不一样,async的话会在下载完后执行,然后阻断html的解析,而defer会在html解析完后执行。


image.png

懒加载和预加载

懒加载(Lazyload)

var viewHeight = document.documentElement.clientHeight
function lazyload() {
    // 获取元素数组
    var eles = document.querySelectorAll('img[data-original][lazyload]') 
    Array.prototype.forEach.call(eles, function(item, index) {
        var rect
        if (item.dataset.original === "") {
            return
        }
        rect = item.getBoundingClientRect() // 获取当前元素的位置信息

        if (rect.bottom >= 0 && rect.top < viewHeight) {
            !function() {
                var img = new Image()
                img.src = item.dataset.original
                img.onload = function() {
                    item.src = img.src
                }
                item.removeAttribute('data-ogiginal')
                item.removeAttribute('lazyload')
            }()
        }
    })
}

lazyload() // 解决首屏加载的问题

document.addEventListener('scroll', lazyload)

然后各个框架一般也都有自己的实现方法。

预加载(Preload)

上一篇 下一篇

猜你喜欢

热点阅读