网页里面 音/视频 加载同步阻塞问题分析以及优化

在开发中,经常会有加载网页完成之后会走加载完成的回调,我们在这个回调里面做一些事情,由于网页是顺序同步加载,这个回调会很慢。

测试demo:

	<script>
		console.time('start')

	</script>
	<div>
		<audio src="../demoMusic1.mp3"></audio>
		<audio src="../demoMusic2.mp3"></audio>
		<p>
			Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptates itaque soluta, minus veritatis commodi sit
			delectus iusto autem nesciunt possimus reprehenderit sunt, repellendus quia laborum exercitationem suscipit?
			Temporibus, ex pariatur.
		</p>
	</div>
	<script>
		console.log('执行到javascript - start')
		window.onload = function() {
			console.log('加载完成')
		}
		console.timeEnd('start')
		console.log('执行到javascript - end')

	</script>

例子中使用到console.timeconsole.timeEnd 启动一个名为start的计时器,来记录加载所有耗时。
这时我们将network正常的网速,得到运行结果如下:

执行到javascript - start
start: 1.4228515625ms
执行到javascript - end
加载完成

这时我们将network设置成fast 3g,得到运行结果如下:

执行到javascript - start
start: 1.552978515625ms
执行到javascript - end
加载完成

这时我们将network设置成slow 3g,得到运行结果如下:

执行到javascript - start
start: 2.157958984375ms
执行到javascript - end
加载完成

可见window.onload会等待页面中所有东西加载完成之后执行,音视频文件的同步加载会阻塞javascript的执行。
如果音视频是否加载完成对回调函数里面没有影响的话,可以在回调函数执行后使用javascript动态插入音视频。

我们来修改下这个demo

<script>
		console.time('start')

	</script>
	<div>
		<!-- <audio src="../demoMusic1.mp3"></audio> -->
		<!-- <audio src="../demoMusic2.mp3"></audio> -->
		<p>
			Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptates itaque soluta, minus veritatis commodi sit
			delectus iusto autem nesciunt possimus reprehenderit sunt, repellendus quia laborum exercitationem suscipit?
			Temporibus, ex pariatur.
		</p>
	</div>
	<script>
		console.log('执行到javascript - start')
		window.onload = function() {
			console.log('加载完成')
			var myMusic1 = document.createElement("audio");
			myMusic1.src = "../demoMusic1.mp3";
			myMusic1.addEventListener("canplaythrough", function() {
				console.log('音频文件已经准备好');
				myMusic1.play(); //播放 mp3这个音频对象
			}, false);

			var myMusic2 = document.createElement("audio");
			myMusic2.src = "../demoMusic2.mp3";
			myMusic2.addEventListener("canplaythrough", function() {
				console.log('音频文件已经准备好');
				myMusic2.play(); //播放 mp3这个音频对象
			}, false);
		}
		console.timeEnd('start')
		console.log('执行到javascript - end')
	</script>

依次用上面不同的网速段来测试下,依旧用到console.timeconsole.timeEnd 启动一个名为start的计时器,来记录加载所有耗时:

这时我们将network正常的网速,得到运行结果如下:

执行到javascript - start
start: 0.422119140625ms
执行到javascript - end
加载完成

这时我们将network设置成fast 3g,得到运行结果如下:

执行到javascript - start
start: 0.455078125ms
执行到javascript - end
加载完成

这时我们将network设置成slow 3g,得到运行结果如下:

执行到javascript - start
start: 0.53466796875ms
执行到javascript - end
加载完成

通过观察加载所用时间,对网页初次加载的速度提升了很多。

如有问题请联系我~

欢迎加入QQ群:
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值