高性能JavaScript之脚本加载与执行

管理浏览器中的JavaScript 代码是个非常棘手的问题,因为代码的加载和执行过程会阻塞浏览器的其他过程,比如用户界面绘制、首屏显示和用户交互等。

  • 推荐将所有的 script 标签放到 body 标签的底部,以尽量减少对整个页面下载的影响。
  • 考虑到 HTTP 请求会带来额外的性能和时间上的消耗,下载单个 100kb 的文件比下载 4 个 25kb 的文件要快,所以尽量减少(合并脚本)页面中外连接脚本文件的数量将会改善性能。
  • HTML 4 为 script 标签定义了一个扩展属性:defer。defer 属性指明本元素所含的脚本不会修改 DOM,虽然会立即下载,但是并不会下载完立即执行,知道 DOM 加载完成(onload 事件被触发前执行)。HMTL 5 新添加了一个 async 属性,也是用于异步加载脚本。async 和 defer 的异同:相同点是都采用并行下载,在下载过程中不会产生阻塞;不同点在于执行时机,async 加载完立即执行,而 defer 需要等到 DOM 加载完后执行。
  • 动态添加脚本元素
var script = document.createElement('script');
script.src = 'mian.js';
document.getElementsByTagName('body')[0].appendChild(script);
  • XMLHttpRequest 脚本注入:优点在于可以下载 JavaScript 而不会立即执行
var xhr = new XMLHttpRequest();
xhr.open('get', 'main.js', true);
xhr.onreadystatechange = function() {
	if (xhr.readyState === 4) {
		if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
			var script = document.createElement('script');
			script.type = 'text/javascript';
			script.text = xhr.responseText;
			document.body.appendChild(script);
		}
	}
}
xhr.send():
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值