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 相关文章推荐
function, new function, new Function之间的区别
Mar 08 Javascript
javascript XMLHttpRequest对象全面剖析
Apr 24 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
Jan 02 Javascript
node.js中的fs.symlinkSync方法使用说明
Dec 15 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
JavaScript常用判断写法大全(推荐)
May 30 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
Aug 01 Javascript
详解webpack的配置文件entry与output
Aug 21 Javascript
vue.js根据代码运行环境选择baseurl的方法
Feb 28 Javascript
angular 内存溢出的问题解决
Jul 12 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
Aug 03 Javascript
JavaScript 防篡改对象的用法示例
Apr 24 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
php获得文件扩展名三法
2006/11/25 PHP
Destoon实现多表查询示例
2014/08/21 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
javascript中eval函数用法分析
2015/04/25 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
理解Python垃圾回收机制
2016/02/12 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
举例讲解Python装饰器
2020/12/24 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
公务员职业生涯规划书范文  
2014/01/19 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
如何用Python搭建gRPC服务
2021/06/30 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python