深入理解javascript中defer的作用


Posted in Javascript onDecember 11, 2013

很多人都已经把 Javascript的用的炉火纯青了,但见到defer未必就知道他是做什么用的;很多人也都遇到过这样的问题,需要直接执行别且操作DOM对象的js 总是报找不到对象的错误,原因大家也都知道就是页面还有没有加载完毕,js的操作对象还在下载中。但很多人都不知道,添加defer标签就能轻而易举的解决这个问题。

<script src="../CGI-bin/delscript.js" defer></script>

中的defer作用是文档加载完毕了再执行脚本,这样回避免找不到对象的问题---有点问题

<button id="myButton" onclick="alert('ok')">test</button>
<script>
myButton.click();
</script>
<script>
myButton.click();
</script>
<button id="myButton" onclick="alert('ok')">test</button>
<script defer>
function document.body.onload() {
alert(document.body.offsetHeight);
}
</script>

加上 defer 等于在页面完全在入后再执行,相当于 window.onload ,但应用上比 window.onload 更灵活!

defer是脚本程序强大功能中的一个“无名英雄”。它告诉浏览器Script段包含了无需立即执行的代码,并且,与SRC属性联合使用,它还可以使这些脚本在后台被下载,前台的内容则正常显示给用户。

--但是 文档加载完毕了再执行脚本

请注意两点:

1、不要在defer型的脚本程序段中调用document.write命令,因为document.write将产生直接输出效果。

2、而且,不要在defer型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数。

一个常用的优化性能的方法是:当脚本不需要立即运行时,在<SCRIPT>标签中设置“defer”属性。 (立即脚本没有被包含在一个function块中,因此会在加载过程中执行。) 设置“defer”属性后,IE就不必等待该脚本装载和执行完毕。这样页面加载会更快。一般来说,这也表明立即脚本最好放在function块中,并在 document或者body对象的onload 句柄中处理该函数。在有一些脚本需要依赖用户操作而执行时----例如点击按钮,或者移动鼠标到某个区域----使用该属性非常有用。但当有一些脚本需要在页面加载过程中或加载完成后执行,使用defer属性得到的好处就不太大。

script中的defer属性默认情况下是false的。按照DHTML编程宝典中的描述,对于Defer属性是这样写的:

Using the attribute at design time can improve the download performance of a page because the browser does not need to parse and execute the script and can continue downloading and parsing the page instead.

也就是说:如果是编写脚本的时候加入defer属性,那么浏览器在下载脚本的时候就不必立即对其进行处理,而是继续对页面进行下载和解析,这样会提高下载的性能。

这样的情况有很多种。比如你定义了很多javascript变量,或者在引用文件(.inc)中写了很多的脚本需要处理,那不妨在这些脚本中加入defer属性,对性能的提高肯定有所帮助。

举例如下:

<script language="javascript" defer>
var object = new Object();
....
</script>

因为defer属性默认是为false的,那么在这里

<script language="javascript" defer>

显式声明defer属性后等同于

<script language="javascript" defer=true>

声明了defer属性之后,需要判断是否有别的变量引用了defer脚本块中的变量,否则的话会导致脚本错误的产生。

Javascript 相关文章推荐
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
Jul 10 Javascript
javascript操作referer详细解析
Mar 10 Javascript
如何防止回车(enter)键提交表单
May 11 Javascript
JS onkeypress兼容性写法详解
Apr 27 Javascript
Bootstrap表格和栅格分页实例详解
May 20 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
Sep 28 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
Feb 12 Javascript
JS实现的五级联动菜单效果完整实例
Feb 23 Javascript
解决html input验证只能输入数字,不能输入其他的问题
Jul 21 Javascript
一个基于react的图片裁剪组件示例
Apr 18 Javascript
使用mixins实现elementUI表单全局验证的解决方法
Apr 02 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
Dec 10 #Javascript
JQuery页面的表格数据的增加与分页的实现
Dec 10 #Javascript
jquery动态加载select下拉框示例代码
Dec 10 #Javascript
关于jquery中全局函数each使用介绍
Dec 10 #Javascript
jquery对ajax的支持介绍
Dec 10 #Javascript
jquerydom对象的事件隐藏显示和对象数组示例
Dec 10 #Javascript
鼠标选择动态改变网页背景颜色的JS代码
Dec 10 #Javascript
You might like
基于mysql的bbs设计(四)
2006/10/09 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
JavaScript访问样式表代码
2010/10/15 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
jquery json 实例代码
2010/12/02 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
优化Node.js Web应用运行速度的10个技巧
2014/09/03 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
详解python3实现的web端json通信协议
2016/12/29 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
python time()的实例用法
2020/11/03 Python
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
广告设计专业自荐信范文
2013/11/14 职场文书
中专生求职自荐信范文
2013/12/22 职场文书
英语演讲稿范文
2014/01/03 职场文书
仓管岗位职责范本
2014/02/08 职场文书
高中教师评语大全
2014/04/25 职场文书
教师教学评估方案
2014/05/09 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
gateway网关接口请求的校验方式
2021/07/15 Java/Android