关于延迟加载JavaScript


Posted in Javascript onMay 05, 2015

JavaScript的延迟加载是那些在web上,能让你想抓狂地去寻找解决方案的问题之一。

很多人说“那就用defer”或“async”,甚至有些人说“那就将你的javascript代码放在页面代码底部”。

上述方法都不能解决在web页面完全加载后,再加载外部js的问题。上述方法也会偶尔让你收到Google页面速度测试工具的“延迟加载javascript”警告。所以这里的解决方案将是来自Google帮助页面的推荐方案。

如何延迟加载JavaScript

下面是Google推荐的代码。这些代码应被放置在</body>标签前(接近HTML文件底部)。另外,我将外部JS文件名突出显示。

<script type="text/javascript">
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "defer.js";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>

这里做了什么?
这段代码意思是等到整个文档加载完后,再加载外部文件“defer.js”。

具体说明

1.复制上面代码

2.粘贴代码到HTML的</body>标签前 (靠近HTML文件底部)

3.修改“defer.js”为你的外部JS文件名

4.确保你文件路径是正确的。例如:如果你仅输入“defer.js”,那么“defer.js”文件一定与HTML文件在同一文件夹下。

这段代码能用在哪里(和哪里不能用)

这段代码直到文档加载完才会加载指定的外部JS文件。因此,不应该把那些页面正常加载需要依赖的javascript代码放在这里。而应该将JavaScript代码分成两组。一组是因页面需要而立即加载的javascript代码,另外一组是在页面加载后进行操作的javascript代码(例如添加click事件或其他东西)。这些需等到页面加载后再执行的JavaScript代码,应放在一个外部文件,然后再引进来。

例如,在这页面我使用上述文件进行延迟加载 - Google analytics,Viglink (我怎么赚钱),和显示在底部的Google+徽章(我的社交媒体)。这对于我来说,没有理由在初始页面加载时加载这些文件,因为初始阶段都没必要加载上述无关紧要的内容。也许在你的页面中也有同样性质的文件。那你难道想让用户在看到网页内容之前,还要等待这些文件加载吗?

为什么不使用其它方法呢?

直接插入代码、将脚本放置在底部和使用“defer”或“async”,这几种方法都不能达到先加载页面后加载JS的目的,而且它们肯定不能在各个浏览器上表现一致。

它为什么重要?

它的重要性是由于Google将页面速度作为排名因素之一而且用户也希望能快速加载页面。另外对于移动搜索引擎优化也是非常重要的。Google根据页面最初加载时间来衡量页面速度。这意味着你必须尽可能快地得到页面的load事件。页面最初加载时间是Google用来评价你的web页面质量(而且别忘记用户在等待页面的加载)。Google积极推进和推荐将上述的无关紧要的内容按重要性排列,让所有资源(js,css,images等)脱离关键的渲染路径,而且这样做是值得去努力的。如果这样能取悦用户,且让Google开心,你很应该这样做。

用法示例

我已创建一个页面,在这个页面你可看到这段代码的使用。

让你测试的示例文件

好的,为了说明,我已制作几个示例页面让你进行测试。每个页面都做同一样的事情。这是一个普通的HTML页面,含有一个等待2秒然后输出“hello world”的javascript脚本。你可以测试这些文件,然后你会看到只有一种方法,它的加载时间是不包括2秒的等待时间。

直接插入脚本的页面 ? 点击这里

带有使用“defer”外部脚本的页面 ? 点击这里
使用上述推荐代码的页面 ? 点击这里

关键点

压倒一切的首要任务应该是尽可能快地交付内容给用户。而我们一直没想着如何对待我们的javascript代码。但用户不应该为一些无关紧要的脚本,而被迫地为内容而作出等待。无论你的页脚多酷,都没理由让一个可能从不滚动到页脚的用户,去加载那些让页脚变酷的javascript文件。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
jquery 卷帘效果实现代码(不同方向)
Feb 05 Javascript
jquery动态添加option示例
Dec 30 Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 Javascript
JQuery查找DOM节点的方法
Jun 11 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
Aug 28 Javascript
分享javascript计算时间差的示例代码
Mar 19 Javascript
JavaScript基于对象去除数组重复项的方法
Oct 09 Javascript
H5图片压缩与上传实例
Apr 21 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
Dec 19 Javascript
mpvue微信小程序开发之实现一个弹幕评论
Nov 24 Javascript
jquery实现垂直手风琴导航栏
Feb 18 jQuery
Javascript闭包(Closure)详解
May 05 #Javascript
javascript实现仿IE顶部的可关闭警告条
May 05 #Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 #Javascript
JS实现随机乱撞彩色圆球特效的方法
May 05 #Javascript
jquery实现图片随机排列的方法
May 04 #Javascript
jquery实现的美女拼图游戏实例
May 04 #Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
May 04 #Javascript
You might like
Sony CFR 320 修复改造
2020/03/14 无线电
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
javascript英文日期(有时间)选择器
2007/05/02 Javascript
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
pandas数据集的端到端处理
2019/02/18 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
python实现控制台输出彩色字体
2020/04/05 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
汇智创新科技发展有限公司
2015/12/06 面试题
文明城市标语
2014/06/16 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
新闻稿件写作范文
2015/07/18 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python