js实现图片预加载(含源码)

网上讲图片与加载的实现方法很多,按照实现方式可以分为CSS,js和ajax三类。本文聚焦于工作中最最最最常用的js预加载方式,并介绍使用场景

💡几个问题

  • 什么类型图片资源需要预先加载
    一般是非首屏,且图片资源较大>1MB,有必要进行预先加载
    一些画册展示网站,会在用户登录界面把下一屏的图片都加载了

  • 预加载的原理
    提前发送网络请求,先拿到资源。等到真正渲染到元素时,再发送请求,直接击中浏览器缓存,这样更快,节省资源加载时用户的等待时间

💡图片预加载代码

function preloadImage(srcList: string[], callback = (e?) => {}): void {
  if (!Array.isArray(srcList) || srcList.length < 1) return;

  srcList.forEach((i) => {
    const img = new Image();
    img.onload = callback;
    img.onerror = callback;

    // 如果用Rax的Picture引入组件,那么会进行优化,带上后缀_.webp。本地图片以data:开头,会被编译为base64,不用加后缀
    // img.src = i.indexOf('data:') === 0 ? i : i + '_.webp';

	// 用原生<img/>标签引入 不存在要修改src问题
	img.src = i;
  });
}

💡在react或者rax中使用

const imgSrc = 'https://c-ssl.duitang.com/uploads/blog/202105/19/20210519212438_ced7e.jpg';

function App(){
	// 等dom都mount了,再预加载,防止影响首屏渲染
	useEffect(()=>{
		preloadImage([imgSrc])
	},[])
	return <div>{'some content...'}</div>
}

💡其他资源可以预先加载吗
video和audio标签有自己的preload选项

💡 首屏图片怎么提前加载
对于一些首屏的必要图片,比如背景图呀,在页面加载的生命周期的早期阶段就开始获取,在浏览器的主渲染机制介入前就进行预加载

<link rel=\"preload\" href=\"https://c-ssl.duitang.com/uploads/blog/202105/19/20210519212438_ced7e.jpg\" as=\"image\" crossorigin="anonymous" />
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值