`
fang9159
  • 浏览: 48127 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
社区版块
存档分类
最新评论

关于对defer的理解.

阅读更多
<script defer></script>
defer作用是文档加载完毕了再执行脚本内容.
我也一直是这样认为的。所以有的时候在提高性能上会去考虑它.比如有时可以在整个文档加载完后再去执行它.

但请大家看一下这样的一个例子,大家说一下它的执行顺序是什么样子的呢.
<body>
<script defer>
alert(1);
</script>
<script>
alert(2);
</script>
<script>
alert(3);
</script>
</body>


运行之后就会觉得很怪了。但我一直找不到原因,我不知道是不是我对defer的理解有问题.
所以要请各位.
分享到:
评论
14 楼 hax 2007-07-03  
正在制定的html5有极大可能会完善script标签的定义。

会有两个属性,async和defer。

其中defer将明确为在整个page的parsing结束之后执行(执行时机差不多就是DOMContentLoad或者IE htc的ondocumentready)。并且会严格按照所有defer的script的顺序执行。

13 楼 rocwang 2007-07-03  
defer只是告诉浏览器你的这段脚本不会向文档输出内容,有的浏览器可以进行优化,还是不要用这个来控制执行顺序的好。
12 楼 hax 2007-07-02  
Lucas Lee 写道
查了一下MSDN的DHTML Reference不就知道了?
这是一个符合w3c标准的属性,所以解释是通用的。
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/defer.asp

defer,我的理解是,等下载完所有的页面后再执行。



如前所述,千万不要以为msdn的描述是可靠的,通用的。实际上msdn经常会有自己打自己耳光的事情。
11 楼 hax 2007-07-02  
defer的含义并不是这样的。

在w3c标准中defer的本意只是表示这段脚本不会输出文档内容,所以可以继续解析和呈现。至于执行顺序,完全语焉不详。而且这个属性只是一个hint,没有说必须如此,所以许多浏览器根本不睬这个属性。

但是在defer属性的创造者ms那里,是有execute顺序的,关于defer的稀奇古怪的行为请看:http://www.websiteoptimization.com/speed/tweak/defer/

显然defer是个讨厌的东西,需要慎用。
10 楼 ueseu 2007-07-02  
<script defer>
function init(){
document.getElementById("div").innerHTML="OK";
}
init();
</script>
<div id="div">如果你能看到这一句,那就是说没有达到我所要的效果
<img src="http://icon.ajiang.net/icon_0.gif" />
</div>


在IE6和FIREFOX2下完全不一样
9 楼 j2eeqk 2007-03-12  
希望zkj_beyond之js大拿能出来给点说发~~~
8 楼 fang9159 2006-11-09  
所以还是少用这个为好.
平时写程序的时候注意顺序也没什么问题.
7 楼 ixiaoyong 2006-11-08  
该代码如果在本地执行 和 部署到远程服务器再打开后再执行 的顺序也不同。。。
我的机器是win2k
应用程序服务器是tomcat
6 楼 BIGN 2006-11-07  
其实这跟使用什么样的浏览器有关系的,我用Firefox都没这样的效果
5 楼 fang9159 2006-11-07  
liuyxit 写道
要注意是基于什么标准:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>

<BODY>
<script defer = true> 
alert(1); 
</script> 
<script> 
alert(2); 
</script> 
<script> 
alert(3); 
</script>
</BODY>
</HTML>
我调试过,不过它执行的顺序仍然有问题.
4 楼 liuyxit 2006-11-07  
要注意是基于什么标准:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>

<BODY>
<script defer = true> 
alert(1); 
</script> 
<script> 
alert(2); 
</script> 
<script> 
alert(3); 
</script>
</BODY>
</HTML>
3 楼 LucasLee 2006-11-07  
fang9159 写道
to Lucas Lee:
更怪的是
你直接把这一段拷贝过去执行看看?
记住,不要<body>标签
<script>
<script defer = true> 
alert(1);  
</script> 
<script> 
alert(2);  
</script> 
<script> 
alert(3);  
</script>
它的顺序又变成正常了。但是前提是你要删掉body标签.


我试验了,将<script>放在<body>之外可以得到期望的顺序。
2 楼 fang9159 2006-11-07  
to Lucas Lee:
更怪的是
你直接把这一段拷贝过去执行看看?
记住,不要<body>标签
<script>
<script defer = true> 
alert(1);  
</script> 
<script> 
alert(2);  
</script> 
<script> 
alert(3);  
</script>
它的顺序又变成正常了。但是前提是你要删掉body标签.
1 楼 LucasLee 2006-11-07  
查了一下MSDN的DHTML Reference不就知道了?
这是一个符合w3c标准的属性,所以解释是通用的。
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/defer.asp

defer,我的理解是,等下载完所有的页面后再执行。

结果我试了一下楼主的代码,结果真不是这样,就是有没有defer,都按出现的顺序执行!
在ff上一样。
我修改了一下代码:
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
 <script defer=true>  
 alert(1);  
 </script>  
111

 <script>  
 alert(2);  
 </script>  
222
 <script>  
 alert(3);  
 </script>
333
</BODY>
</HTML>


在FF上执行跟以前一样,但在IE上执行结果很有趣:
111在alert(1)之前出现,说明了defer起了一点用,让alert(1)在11后被执行;而alert(2)在222出现前执行的,333同样。

相关推荐

    go代码-defer_impact.go

    在Go语言中,`defer`语句是一种非常重要...在`defer_impact.go`的示例中,我们可能会看到各种使用`defer`来控制流程和资源释放的实例,通过学习这些示例,我们可以更好地理解和掌握`defer`的用法和其对程序执行的影响。

    go代码-defer_parameters.go

    - 这个文件通常包含关于`defer_parameters.go`的额外信息,如代码的用途、示例说明或作者的注释。它可能提供了使用该代码的指导或者对`defer`特性的更深入解释。 通过`defer`,Go语言提供了一种优雅的方式来处理...

    A级试题及答案.

    阅读判断题:这部分题型要求考生根据提供的短文内容判断句子的正确性,涉及到对文章细节的理解和推理。 1. 安徒生诞辰200周年纪念活动:安徒生是丹麦作家,他的童话广受欢迎,今年是他的诞辰200周年,全球范围内有...

    曹鹏SEO视频教程-54.代码检验.rar

    3. JavaScript优化:理解JavaScript对SEO的影响,如何避免使用JavaScript阻止搜索引擎抓取重要内容,以及使用异步加载和 defer 或 async 属性的方法。 4. 元信息优化:如何编写有效的标题(title)、描述(meta ...

    手撕Go语言v1.1.pdf

    2. **实践项目**:通过编写小项目来加深理解和记忆。 3. **阅读源码**:阅读优秀的开源项目源码是提升技能的有效途径。 4. **社区参与**:加入Go语言相关的社区和技术论坛,与其他开发者交流经验。 #### 五、Go语言...

    JavaScript特效.rar

    这涉及到DOM(文档对象模型)操作,以及对事件处理的理解。 2. **DOM操作**: 在JavaScript中,DOM允许我们以编程方式访问和修改HTML元素。要实现状态栏特效,可能需要选取特定的HTML元素,例如使用`document....

    boost.thread.1.3.5中文翻译

    标题和描述均指向了一个关于Boost.Thread 1.3.5版本的中文翻译文档,这份文档由TuYongce翻译并版权所有,旨在为中文开发者提供Boost.Thread库的详细使用指南。Boost.Thread是Boost库中的一个重要组成部分,它允许...

    JavaScript关于提高网站性能的几点建议(一)_.docx

    JavaScript是构建现代网页和应用程序的关键技术之一,但过度或不当使用JavaScript可能会对网站性能造成负面影响。为了提升用户体验和网站性能,以下是一些基于JavaScript优化的建议: 首先,我们需要理解性能优化的...

    英语常见单词同义词.doc

    1. **Unconcerned** 和 **indifferent**:这两个词都表示“不关心的”,在写作中可以用来表达对某事漠不关心的态度。 2. **As/so far as sb be concerned**:这句型用于表达“就某人而言”的意思,例如,“As far as...

    计算机编程常用术语英语词汇汇总.doc

    13. **数据字典(Data Dictionary)**:数据库中存储元数据的集合,提供了关于数据库结构和内容的信息。 14. **数据字典视图(Data Dictionary View)**:显示数据库字典信息的特定视图。 15. **数据文件(Data File...

    go/goland TCP 服务 源码.zip

    通过对源码的分析,我们可以更深入理解Go语言实现TCP服务的方式。 7. **高级特性**: - Go的并发模型是基于goroutine和channel的,可以利用这些特性来实现高效的并发处理,如使用`select`关键字同步读写操作。 - ...

    Googlemap_API.rar_GoogleMap_加载地图_地图

    这个名为"Googlemap_API.rar_GoogleMap_加载地图_地图"的压缩包文件,很显然是一个关于如何使用Google Map API进行地图加载和相关设置的教程。以下是对这个主题的详细讲解: 首先,**初始化地图**是使用Google Map ...

    24099暂缓执行相关情况问题的情况-论文.zip

    在IT行业中,"暂缓执行"通常指的是程序设计中的一个概念,比如...通过对压缩包内的论文进行深入阅读,我们可以获取更多关于“24099暂缓执行相关情况问题”的具体分析和解决方案,对于理解和掌握这一技术会有很大帮助。

    软件缺陷管理.pdf

    首先,我们要理解缺陷管理的基本流程: 1. **缺陷检测**:这是缺陷管理的第一步,由测试人员在软件开发的不同阶段进行。他们依据预设的质量标准和测试用例,检查软件的功能是否符合设计要求。一旦发现不符合预期的...

    深入解析jQuery中Deferred的deferred.promise()方法

    最后,关于`deferred.promise()`的另一个重要点是,它并不能防止Deferred对象的状态被改变,而是防止通过返回的Promise对象改变状态。也就是说,如果你有直接访问原始`deferred`对象的权限,你仍然可以调用`resolve...

    Go的基本教程.txt

    Go语言还引入了defer语句,用于在函数返回之前执行延迟调用,常常与错误处理结合使用。在测试方面,Go语言拥有内置的测试框架,提供了编写测试用例的丰富支持。基准测试(benchmark)则允许开发者进行代码性能分析,...

    Go语言学习笔记.pdf 共174页

    Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分:Go语言基础、标准库和扩展库...

    【_cjl3080434008_book】 Go 学习笔记.pdf

    文档中还提到了版本迭代和更新记录,从2012年1月开始,至2012年12月20日止,包含了一系列关于Go语言学习笔记的更新信息,反映了作者对该语言学习过程中的理解和总结。 由于文档内容的不完整性,以上知识点可能并不...

Global site tag (gtag.js) - Google Analytics