`
jianson_wu
  • 浏览: 65888 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

<script>标签的位置/和延迟脚本

阅读更多
1、标签的位置
按照惯例,所有<script>元素都应该放在页面的<head>元素中,例如:
<html>
<head>
  <title> New Document </title>
  <script type="text/javascript" src="example1.js"></script>
  <script type="text/javascript" src="example2.js"></script>
</head>
<body>
  <!--这里放内容-->
</body>
</html>
这种做法的目的是把所有外部文件(包含CSS文件和javascript文件)的引用都放在相同的地方。可是,在文档<head>元素中包含所有的js文件,意味着必须等到全部javascript代码都被下载、解析和执行完成之后,才能开始呈现页面的内容(浏览器在遇到<body>标签时才开始呈现内容)。对于那些需要很多javascript代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白。为了避免这个问题,现代web应用程序一般都把全部javascript引用放在<body>元素中,放在页面的内容后面,如下例所示:
<html>
<head>
  <title> New Document </title>
</head>
<body>
  <!--这里放内容-->
  <script type="text/javascript" src="example1.js"></script>
  <script type="text/javascript" src="example2.js"></script>
</body>
</html>
这样,在解析包含的javascript代码之前,页面的内容将完全呈现在浏览器中。而用户也会因为浏览器窗口显示空白页面的时间缩短而感到打开页面的速度加快了。


2、延迟脚本
HTML4.0为<script>标签定义了defer的属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会延迟到整个页面都解析完毕后在执行。因此,在<script>元素中设置defer属性(如下面的例子),实际上与上面介绍的把<script>元素放在页面底部的效果是一样的。
<html>
<head>
  <title> New Document </title>
  <script type="text/javascript" defer="defer" src="example1.js"></script>
  <script type="text/javascript" defer="defer" src="example2.js"></script>
</head>
<body>
  <!--这里放内容-->
</body>
</html>
这个例子中,虽然我们把<script>元素放在了文档的<head>元素中,但其中包含的脚本将延迟到浏览器遇到</html>标签后在执行。
不过,问题是并非所有浏览器都支持defer属性,IE和firefox3.0是目前唯一支持defer属性的主流浏览器。其他浏览器则会忽略这个属性,不延迟脚本的执行
分享到:
评论
7 楼 _mjhx 2011-04-12  
我尝试把一个写了很多js的页面中,所有的js都迁移到</body>标签的前面  怎么没用啊 页面还是一样的慢。其中js里面有用jquery给页面注册了装载事件。。。感觉没用。
6 楼 xiaohui886688 2011-04-12  
还不是很确定,那就先放在body里面吧。
5 楼 yoyo837 2011-04-10  
如果这 两个  都 有 些:"慎用":,  那还是不如该放哪就放哪....
4 楼 int08h 2011-04-08  
async和defer是不一样的概念,Firefox这两者都支持
defer在DOM Tree Parse完成之后,DOMContentLoaded事件之前,一个特定的时期执行,拥有确定性
async则啥时候下载完啥时候执行,保证顺序,但与DOM并没有关系,无确定性
3 楼 llb0536 2011-04-08  
经过实际测试
defer="defer" 很多情况下会导致非Firefox浏览器其他js出现问题。

以DZ为例,在header加defer="defer" 后,有些版块会出现打不开现象(非Firefox内核)

所以慎用。
2 楼 jianson_wu 2011-04-06  
amwjx 写道
引用
不过,问题是并非所有浏览器都支持defer属性,IE和firefox3.0是目前唯一支持defer属性的主流浏览器。其他浏览器则会忽略这个属性,不延迟脚本的执行



其它浏览器可以使用async="true"属性,声明脚本异步加载。




嗯嗯,谢谢。    这是在《javascript高级编程》 图灵  的书里面的一些个人感觉到时很细节的问题,不过还是实践中得到的才是真理来的。 谢谢amwjx ,又学到了新知识
1 楼 amwjx 2011-04-05  
引用
不过,问题是并非所有浏览器都支持defer属性,IE和firefox3.0是目前唯一支持defer属性的主流浏览器。其他浏览器则会忽略这个属性,不延迟脚本的执行



其它浏览器可以使用async="true"属性,声明脚本异步加载。

相关推荐

    动态给head添加script

    在网页开发中,有时我们需要在页面加载过程中动态地向`&lt;head&gt;`标签内添加`&lt;script&gt;`元素,以便实现异步加载脚本、延迟加载或按需加载等功能。这种技术对于优化网页性能、减少首屏加载时间以及提高用户体验至关重要。...

    HTML5 对各个标签的定义与规定:script

    - 当`src`属性存在时,`&lt;script&gt;`标签必须为空,即不能包含内联脚本。 - 在使用`async`或`defer`属性时,需要注意它们之间以及与脚本依赖关系之间的相互影响。 ### 总结 `&lt;script&gt;`标签是HTML5中非常重要的元素之一...

    Script中defer的作用

    `defer`属性是`&lt;script&gt;`标签的一个可选属性,它允许我们控制脚本的加载和执行顺序,从而改善页面的加载速度和用户体验。本文将深入探讨`defer`属性的工作原理、优点以及如何正确使用。 首先,了解`defer`的基本...

    javascript写在head标签中产生的报错.pdf

    1. **延迟脚本执行**:可以使用`&lt;script&gt;`标签的`defer`属性,这会让浏览器等待HTML解析完成后再执行JavaScript,但不会阻止页面渲染。 ```html &lt;script defer src="your-script.js"&gt;&lt;/script&gt; ``` 2. **异步加载*...

    html里js怎么使用知识分享.docx

    传统做法是将`&lt;script&gt;`标签放在`&lt;head&gt;`标签中,但这会导致页面内容直到所有JavaScript下载并执行完毕后才显示。为提高用户体验,现代做法是将`&lt;script&gt;`标签放在`&lt;body&gt;`标签的底部,例如: ```html ... &lt;body...

    一些网站页面跳转代码.pdf

    总结起来,网页跳转可以通过服务器端编程或客户端脚本实现,有多种方式可以选择,包括直接使用JavaScript的`window.location`,HTML的`&lt;meta&gt;`标签,以及针对不同浏览器特性的定制代码。选择哪种方式取决于具体需求...

    导入css的4种方式和导入js的方式

    `defer`表示延迟加载,所有`defer`脚本按顺序执行,但在`&lt;body&gt;`标签结束前。示例: ```html &lt;script async src="script1.js"&gt;&lt;/script&gt; &lt;script defer src="script2.js"&gt;&lt;/script&gt; ``` #### 4. 动态创建`&lt;script&gt;`...

    PgwMenu是一款基于jQueryZepto的响应式菜单

    然后,通过`&lt;script&gt;`标签引入jQuery和PgwMenu的脚本,并使用`$('#myMenu').pgwMenu();`一行代码初始化菜单。 在压缩包文件“PgwMenu-master”中,除了核心的JavaScript和CSS文件外,可能还包含文档、示例和源码,...

    动态菜单jquery.menu-1.0

    这通常通过在 `&lt;head&gt;` 标签内添加 `&lt;script&gt;` 标签来完成。例如: ```html &lt;script src="https://code.jquery.com/jquery-3.6.0.min.js"&gt;&lt;/script&gt; &lt;script src="js/jquery.menu-1.0.js"&gt;&lt;/script&gt; ``` 然后,你...

    jquery-1.1.3 效率提高800%

    &lt;br&gt;Safari 2 3575ms 475ms 753% &lt;br&gt;Opera 9.1 3196ms 326ms 980% &lt;br&gt;Average improvement: 867% &lt;br&gt;&lt;br&gt;下表为jQuery1.1.3与常用的一些JS库选择器的对比:&lt;br&gt;Browser Prototype jQuery Mootools Ext Dojo &lt;br&gt;...

    js优化1

    HTML4规范允许在&lt;head&gt;和&lt;body&gt;中任意位置放置&lt;script&gt;,但传统做法是将样式表&lt;link&gt;和脚本&lt;script&gt;放在&lt;head&gt;中,以便尽早定义页面外观和行为。然而,这样做会导致页面加载延迟,因为所有&lt;script&gt;都会阻塞页面渲染...

    js获取本机的外网/广域网ip地址完整

    2. **引入API**:在`&lt;/body&gt;`标签之前添加`&lt;script&gt;`标签,指定`src`属性为API的URL,这样当页面加载时,JavaScript会自动执行这个URL指向的脚本。 需要注意的是,这种方法依赖于第三方服务,如果服务不可用或被...

    javascript标签在页面中的位置探讨

    传统的做法是将&lt;script&gt;标签放置在HTML文档的&lt;head&gt;部分,但随着网页复杂性的增加,这种做法可能会导致页面加载延迟,尤其是在依赖大量JavaScript代码的场景下。 首先,当JavaScript文件位于&lt;head&gt;中时,浏览器会...

    JavaScript中的无阻塞加载性能优化方案

    Yahoo的YSlow优化规则建议将&lt;script&gt;标签放在&lt;body&gt;标签的底部,而不是&lt;head&gt;中,原因在于浏览器在遇到&lt;script&gt;标签时会暂停页面的解析,无论是内联脚本还是外部引用的脚本。例如,在以下代码中,&lt;script&gt;标签用于在...

    JavaScript优化专题之Loading and Execution加载和运行

    这种机制意味着如果在&lt;head&gt;部分放置过多的&lt;script&gt;标签,尤其是大型或多个外部脚本,会导致页面加载显著延迟,因为浏览器必须等待每个脚本下载并执行完成才能继续解析HTML。 例如,考虑以下HTML代码片段: ```...

    页面n秒后自动跳转 代码片段 html

    我们可以在`&lt;head&gt;`或`&lt;body&gt;`标签内添加一个`&lt;script&gt;`标签,然后编写一段JavaScript代码来实现自动跳转。下面是一个示例: ```html &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;5秒后自动跳转页面&lt;/title&gt; &lt;script&gt; ...

    探讨JavaScript标签位置的存放与功能有无关系

    值得注意的是,如果`&lt;script&gt;`标签包含外部资源(如引用外部JS文件),这可能会延迟页面内容的呈现,因为浏览器需要等待脚本加载和执行完毕才能继续解析HTML。 2. 放在`&lt;body&gt;`部分: 如果JavaScript代码用于响应...

    HTML5应用开发技术-JavaScript入门.pptx

    在HTML5中,`&lt;script&gt;`标签新增了`async`和`defer`两个属性。`async`表示异步加载,脚本下载不会阻塞页面渲染,但下载完成后会立即执行,可能会影响执行顺序。`defer`则表示延迟执行,脚本在HTML解析完毕后,...

    word版Js网页设计课件.docx

    此外,还提到了外部JavaScript文件的引入,通过`&lt;script&gt;`标签的`src`属性指向.js文件: ```html &lt;script src="xxx.js"&gt;&lt;/script&gt; ``` 这样,浏览器会请求指定URL的.js文件,并将其内容作为JavaScript代码执行。 在...

    jQueryAnimate3d是一款炫酷的鼠标滑过图片3D透视特效jQuery插件

    在HTML文件中,通过`&lt;script&gt;`标签链接到这些资源。接着,可以通过jQuery选择器选取要应用动画的元素,并调用`.animate3d()`方法来初始化插件。此方法允许设置各种参数,如动画速度、3D旋转的角度以及是否启用硬件...

Global site tag (gtag.js) - Google Analytics