博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
脚本加载优化方法
阅读量:5254 次
发布时间:2019-06-14

本文共 872 字,大约阅读时间需要 2 分钟。

本文地址: 

 

如果我们只是单纯在 head 或 body 中引用脚本,由于是否会更改DOM是未知的, 所以脚本在下载执行的过程中会完全阻塞页面的渲染。

若脚本在 head 或 body 中间,有很大可能会出现空白页面,也无法进行用户交互,用户体验很差。

即便是可以并行下载 javascript 文件,但这个下载过程中会影响图片等资源的下载。

所以我们首先需要做的是:

把 script 标签放在 body 里最底部;

因为进行 HTTP 请求时有额外的性能开销,如三次握手,所以还要尽量减少  HTTP 请求:

把 javascript 文件合并成一个;

在一个请求里加载多个 javascript 文件

但是以上并没有解决我们的问题,一个大的 javascript 文件会下载执行脚长时间,在这段时间里,浏览器无法做其他事情。这就需要无阻塞脚本,也就是在页面加载完成后才加载 javascript 代码,即在 window对象 的 load 事件触发之后再下载脚本。

1 延迟脚本

defer:首先我们要确定该脚本不会改变DOM,因为加上就是告诉浏览器这个脚本不会改变 DOM,可以在页面加载完成后再执行。 给 script 标签加上这个属性后,这个文件就可以跟其他资源并行下载了。IE 从 IE10 开始不支持 defer

async:与 defer 区别在于下载完成后就执行,但 defer 要等到页面加载完成后才执行

 

2 动态脚本

也就是动态创建一个 script 标签,在合适的时机插入到页面中,我们可以这种方法来根据需要加载文件,也能指定脚本加载顺序。

 

3 XMLHttpRequest脚本注入

就是通过 XHR 获取脚本  然后在回调函数中创建 script 标签并插入到页面中

 

推荐方法

先添加动态加载所需的脚本,尽可能精简,其中添加一个加载脚本的函数

在 script 标签中调用函数加载其他脚本

 

当然,也有一些懒加载库能使用。

转载于:https://www.cnblogs.com/veinyin/p/7637407.html

你可能感兴趣的文章
hdu 3549 Flow Problem Edmonds_Karp算法求解最大流
查看>>
hdu 5769 Substring 后缀数组 + KMP
查看>>
springmvc代码执行流程
查看>>
Spring Boot学习(四)
查看>>
Java NIO与IO的详细区别(通俗篇)
查看>>
The Reflection And Amplification Attacks && NTP Reply Flood Attack Based On NTP
查看>>
Web后台快速开发框架
查看>>
关于zipfile解压出现的字符编码问题
查看>>
Windows API 弹出文本框输入的内容
查看>>
UVALive - 6571 It Can Be Arranged 最大流
查看>>
Javascript学习笔记(二)在HTML中使用Javascript
查看>>
完全背包
查看>>
Cookie、 LocalStorage 与 SessionStorage详解
查看>>
Thuwc2018 游记
查看>>
R语言输入与输出
查看>>
国土档案管理信息系统【档案著录】-他项权利类档案著录
查看>>
P3366 【模板】最小生成树
查看>>
一个屌丝程序猿的人生(六十九)
查看>>
(二)代理模式详解(包含原理详解)
查看>>
webgame(php+flex) 的优化方案。
查看>>