懒加载+瀑布流

本文探讨了前端性能优化的两种技术——懒加载和瀑布流。懒加载通过在图片进入视口时才加载,减少了页面初始加载时间。瀑布流布局则通过计算图片偏移,动态调整元素位置,提供了流畅的浏览体验。文章详细介绍了这两种技术的实现细节,包括图片预加载、元素视野判断以及滚动监听。同时,还提到了图片加载的HTTP状态码,如200(fromcache)和304,以及不同浏览器的缓存策略。
摘要由CSDN通过智能技术生成

懒加载+瀑布流

1.懒加载

懒加载就是延迟加载,当图片出现在页面中再加载图片,防止页面一次性加载图片,影响浏览器的性能,请求时间过长。

1.在img.onload预加载图片。
2.为页面中的图片设置好大小,防止引起页面的回流,影响性能。
3.判断元素是否进入用户视野中。(利用元素的offsetTop属性和scrollTop、clientTop之间的关系判断),若进入视野,则将data-originnal属性的值赋给图片的src属性。
4.滚动,重复判断元素是否进入视野。

for (let i = 0; i < total; i++) {
    promiseAll[i] = new Promise(resolve => {
        imgs[i] = new Image();
        imgs[i].src = images[i].img_url;
        imgs[i].onload = () => {
            let imgData = {};
            // 设置图片宽高占位
            imgData.height = (imgs[i].height * this.colWidth) / imgs[i].width;
            imgData.width = this.colWidth;
            imgData.src = images[i].img_url;
            this.waterfallList.push(imgData);
            this.rankImgs(imgData);
            resolve(imgs[i]);
        };
    });
}
Promise.all(promiseAll).then(() => {
    this.loading = false;
    this.loadMore(); //加载更多
});


瀑布流

页面刚开始最小高度都为0,colHeights=0,需要根据页面计算每个图片的偏移,找出最小高度,根据img.onload预加载图片,可获取图片的宽高,然后查询最小的高度,给下一个视图添加偏移量(top,left)。

// 计算图片偏移
rankImgs(imgData) {
    let min = this.filterMin();
    imgData.top = min.minHeight;
    imgData.left = min.minIndex * (this.colWidth + this.marginRight);

    this.colHeights[min.minIndex] += imgData.height + this.marginBottom + 80;
},

// 找出最小高度
filterMin() {
    let minHeight = Math.min.apply(null, this.colHeights);
    return {
        minHeight: minHeight,
        minIndex: this.colHeights.indexOf(minHeight)
    };
}

img图片initiator加载机制

img加载有几点:

1、200和304跟缓存的联系
2、请求发起者initiator
3、size(from memory cache和from disk cache)

200 - 直接请求服务器
304 - 使用缓存,先请求服务器,然后服务器告知资源没有变化,浏览器在使用本地缓存
200(from cache)- 不通过服务器,直接使用了浏览器缓存(脚本、图片、字体等)
200(from disk cache)- 在磁盘中(非脚本会存于内存中,如css)

注:200(from cache)和304有点像,具体返回哪个得看服务器的返回

fiewfox 没有from memory cache和from disk cache,只会有304状态,会缓存资源,每次都会请求服务器缓存是否更改,而Chrome则不会,直接使用缓存里面的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值