关于标签,我们有一般会放在两个地方,一个是在标签的内部,另一个是放在前面。这一次我们着重讲解一下放在标签内部。在我们用Js操作DOM元素时,如果不延时执行,DOM元素其实是根本还没有被渲染出来的。所以各种getElementByIdgetElementsByTagName实质上是获取不到的,也谈不上如何进行Style样式的修改或者更多的操作。所以当我们把Js脚本放在了标签里,我们需要延时执行Js脚本文件。


1、标签属性deferasync

  这个是HTML5的属性,在标签内部标注了defer或者async。我们来看一下这两个属性是做什么的。

  • async属性:Js脚本加载和文档渲染是异步进行的, 但当脚本加载完成后便执行。所以当两个外部脚本都有这个属性的时候,我们是无法确定哪个文件先执行,很难解决依赖问题。
  • defer属性:Js脚本加载和文档渲染也是异步进行的,不同的地方是,它是等DOM元素渲染完后才会执行。并且按照HTML标准规定,它是会按顺序执行的,并且是在DOMContentLoaded这个事件触发之前发生。这个会更符合我们的实际要求。

2、关于这个DOMContentLoaded事件

  这个事件我们是用过挺多的,例如Jquery里的ready事件。这个事件就是当DOM元素渲染结束后触发的,和load事件不同,load事件我接下来会说。那我们该怎么使用这个事件呢,当然也是很简单的啦,直接看看代码。

document.addEventListener("DOMContentLoaded", function(){
/* 放置代码 */
}, false);

3、最后一个load事件

  在这个load事件里,会在DOM元素渲染并加载完毕后才会触发。那在实际到底加载完毕是指的什么呢,最明显的就是加载图片。如果仅仅是DOM渲染后便去获取图片的宽度,图片是完全没有加载完的。所以这个时候我们需要用load事件,这个事件会在图片加载完后触发。但是如果我们不需要图片加载后再执行Js脚本,我们最好不使用load事件,因为这会导致延迟很久才执行,造成用户体验不佳。所以我们什么时候用DOMContentloadedload,我们要作出一个选择。


  最后,我们习惯把Js脚本放在前是最好的,它是会在DOM渲染后便执行,可以兼容更多旧的浏览器。

哎哟用Markdown好辛苦,写的东西感觉都怪怪的,调皮不起来了~~看来要多练习

关于Js脚本的延迟执行的更多相关文章

  1. js中的延迟执行和定时执行

    在js中,延迟执行函数有两种,setTimeout和setInterval,用法如下: function testFunction(){Console.log('hovertree.com');} s ...

  2. json转换为go类文件,js脚本,nodejs执行

    js写的代码生成脚本,json生成对应的go type对象 作json转换用 js脚本无甚何依赖,可以直接运行 执行前,按需更改文件 示例 var topname="Data"; ...

  3. 异步执行js脚本——防止阻塞

    JS允许我们修改页面中的所有方面:内容,样式和用户进行交互时的行为. 但是js同样可以阻塞DOM树的形成并且延迟页面的渲染. 让你的js变成异步执行,并且减少不必要的js文件从而提高性能. JavaS ...

  4. JS脚本加载与执行对性能的影响

    高性能JavaScript-JS脚本加载与执行对性能的影响 在web产品优化准则中,很重要的一条是针对js脚本的加载和执行方式的优化.本篇文章简单描述一下其中的优化准则. 1. 脚本加载优化 1.1 ...

  5. JS脚本不能执行

    这段时间在做前端的动态页面,出了很多问题,因为js平时用的很少,所以花了不少无用功. 其中有两点一定要注意: 1.当js中有语法错误时,js脚本会无法执行. 2.当js脚本中有未定义的变量时,后边的语 ...

  6. 无阻赛的脚本(js脚本延迟方法)

    js脚本的加载与执行 1.延迟脚本(defer属性) 带有defer属性的script标签,可以放置在文档的任何位置,在页面解析到该标签时,会开始下载该脚本,但是不会立即执行,直到dom加载完成(on ...

  7. AngularJs中,如何在render完成之后,执行Js脚本

    AngularJs是Google开源的前端JS框架.使用AngularJs, 我们能够容易地.健壮的开发出类似于Gmail一样的单页Web应用.AngularJs这个新兴的MVC前端框架,具有以下特点 ...

  8. ASP.NET UpdatePanel实现点击按钮无刷新且执行js脚本

    [一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/3770779.html]  *.aspx: <asp:ScriptManager ID=& ...

  9. A标签执行JS脚本

    A标签执行JS脚本 分类: Web2012-12-25 22:48 1368人阅读 评论(0) 收藏 举报 前言 A标签是html中常用的标签,它与button按钮是实现页面跳转的两种最常用的方式,经 ...

随机推荐

  1. ActiveMQ集群(2)

    ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要有两种:Master-Slave和Broker Cluster. 1.Master-Slave ...

  2. group by的SQL语句

    有一张项目表 CREATE TABLE [ProjectTable] ( [ProjectID] NVARCHAR(16) NOT NULL, [ProjectName] NVARCHAR(20) N ...

  3. UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design

    题意: 给出一个有向带权图,找到若干个圈,使得每个点恰好属于一个圈.而且这些圈所有边的权值之和最小. 分析: 每个点恰好属于一个有向圈 就等价于 每个点都有唯一后继. 所以把每个点i拆成两个点,Xi  ...

  4. [反汇编练习] 160个CrackMe之006

    [反汇编练习] 160个CrackMe之006. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  5. WTL汉化版2013.10.15

    汉化内容: 2013.10.15 版本:当前可下载Trunk最新版,wtl-code-467-trunk.zip 汉化内容: 1.应用向导的部分汉化,考虑到部分词汇的表述问题,只汉化无影响部分 2.资 ...

  6. UVA 575 Skew Binary (水)

    题意:根据这种进制的算法,例如,给你一个左式,要求推出右式.(其实右式就是一个十进制数,根据这种进位的方法来转成特殊进制的数.) 思路:观察转换特点,有点类似于二进制,但是其在后面还减一了.比如25- ...

  7. LeetCode: Sqrt

    Title: Implement int sqrt(int x). Compute and return the square root of x. 思路:这个平方根肯定是在[1,x]之间,所以在这个 ...

  8. RTP封装h264

    网络抽象层单元类型 (NALU): NALU头由一个字节组成,它的语法如下: +---------------+      |0|1|2|3|4|5|6|7|      +-+-+-+-+-+-+-+ ...

  9. hdu 4435 charge-station

    // 题意 从1出发逛完N个点回到出发点 要在这N个点选择性建设加油站 车每次加满油最多可以行使D米// 然后最少要花多少钱才能达到上述要求// 注意到 第i个城市的花费是 2^(i-1) 所以 我就 ...

  10. 【转】那些不能错过的Xcode插件 -- 不错不错

    原文网址:http://www.cocoachina.com/industry/20130918/7022.html 古人云“工欲善其事必先利其器”,打造一个强大的开发环境,是立即提升自身战斗力的绝佳 ...