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


Posted in Javascript onApril 11, 2013

在制作网页的过程中,我们经常写类似下面的代码:
[html]

<html> 
<head> 
<title>Example HTML Page</title> 
<script type="text/javascript" src="example1.js"></script> 
<script type="text/javascript" src="example2.js"></script> 
</head> 
<body> 
<!-- 这里放内容 --> 
</body> 
</html> 
<html> 
<head> 
<title>Example HTML Page</title> 
<script type="text/javascript" src="example1.js"></script> 
<script type="text/javascript" src="example2.js"></script> 
</head> 
<body> 
<!-- 这里放内容 --> 
</body> 
</html>

按照惯例,所有的<script>元素都应该放在页面的<head>元素中。请注意:无论引用几个外部js文件,浏览器都会按照<script>元素在页面中出现的先后顺序对它们依次进行解析 。换句话说,在第一个<script>元素包含的代码解析完成后,第二个<script>包含的代码才会被解析,然后才是第三个、第四个...
这种做法的目的就是把所有外部文件(包括CSS文件和JavaScript文件)的引用都放在相同的地方。可是,在文档的<head>元素中包含所有JavaScript文件,意味着必须等到全部JavaScript代码都被下载、解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到<body>标签时才开始呈现内容)。对于那些需要很多JavaScript代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口将是一片空白。为了避免这个问题,现代Web应用程序一般都会把全部JavaScript引用放在<body>元素中,放在页面的内容后面,如下所示:
[html]
<html> 
<head> 
<title>Example HTML Page</title> 
</head> 
<body> 
<!-- 这里放内容 --> 
<script type="text/javascript" src="example1.js"></script> 
<script type="text/javascript" src="example2.js"></script> 
</body> 
</html> 
<html> 
<head> 
<title>Example HTML Page</title> 
</head> 
<body> 
<!-- 这里放内容 --> 
<script type="text/javascript" src="example1.js"></script> 
<script type="text/javascript" src="example2.js"></script> 
</body> 
</html>

这样,在解析包含的JavaScript代码之前,页面的内容将完全呈现在浏览器中。而用户也会因为浏览器窗口显示空白页面的时间缩短而感到打开页面的速度加快了。

或者也可以使用<script>标签的defer属性表明脚本在执行时不会影响页面的构造,即脚本会被延迟到整个页面都解析完毕后再运行,代码如下:
[html]

<html> 
<head> 
<title>Example HTML Page</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> 
<html> 
<head> 
<title>Example HTML Page</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>

上述两种写法的实际效果是一样的。但是,并非所有的浏览器都支持defer属性,有些浏览器会忽略这个属性,不延迟脚本的执行。
Javascript 相关文章推荐
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
Dec 29 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
jquery新的绑定事件机制on方法的使用方法
Apr 15 Javascript
关于session和cookie的简单理解
Jun 08 Javascript
Node.js实现文件上传
Jul 05 Javascript
概述VUE2.0不可忽视的很多变化
Sep 25 Javascript
vue.js单页面应用实例的简单实现
Apr 10 Javascript
python爬取安居客二手房网站数据(实例讲解)
Oct 19 Javascript
angularJs select绑定的model取不到值的解决方法
Oct 08 Javascript
angularJS自定义directive之带参方法传递详解
Oct 09 Javascript
写gulp遇到的ES6问题详解
Dec 03 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
Apr 11 #Javascript
如何使用json在前后台进行数据传输实例介绍
Apr 11 #Javascript
在javascript中对于DOM的加强
Apr 11 #Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 #Javascript
在javascript中关于节点内容加强
Apr 11 #Javascript
onkeydown事件解决按回车键直接提交数据的需求
Apr 11 #Javascript
jQuery实用基础超详细介绍
Apr 11 #Javascript
You might like
建立动态的WML站点(三)
2006/10/09 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
小程序实现多列选择器
2019/02/15 Javascript
微信小程序template模版的使用方法
2019/04/13 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
Python输出9*9乘法表的方法
2015/05/25 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
python算法题 链表反转详解
2019/07/02 Python
简单了解python代码优化小技巧
2019/07/08 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
.NET概念性的面试题
2012/02/29 面试题
应届行政管理专业个人自我评价
2013/12/28 职场文书
团干部培训方案
2014/06/03 职场文书
团队口号大全
2014/06/06 职场文书
教师个人成长总结
2015/02/11 职场文书
电影开国大典观后感
2015/06/04 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
离婚协议书范文2016
2016/03/18 职场文书
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技