谈谈javascript放在哪里更合适
关于javascript放在哪里更合适
脚本位置:
例如以下代码:
<html>
<head>
<title>Script Example</title>
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript" src="file3.js"></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<p>Hello world!</p>
</body>
</html>
上面看起来很正常的代码,在载入的时候就会有性能问题:在<head>中加载三个js文件,由于脚本会阻塞页面渲染,知道他们全部下载并执行。
下图显示加载时:

为了尽量减少对整个页面的影响,让页面渲染完成之后开始下载执行js文件。例如:
<html>
<head>
<title>Script Example</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<p>Hello world!</p>
<!-- 页面渲染完成后,下载执行js -->
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript" src="file3.js"></script>
</body>
</html>
Inline JavaScript
如果页面渲染的过程需要用到js文件,我们可以采取内联javascript。例如:
<html>
<head>
<title>Script Example</title>
<link rel="stylesheet" type="text/css" href="styles.css">
<script type="text/javascript" >
/*写入相应的代码*/
</script>
</head>
<body>
<p>Hello world!</p>
<!-- 页面渲染完成后,下载执行js -->
<script type="text/javascript" src="file1.js"></script>
<script type="text/javascript" src="file2.js"></script>
<script type="text/javascript" src="file3.js"></script>
</body>
</html>
延迟脚本
HTML4允许我们给script标签添加属性:“defer”来告诉我们本元素所含的脚本不会修改DOM,因此代码能够安全的延迟执行。该属性只有IE4+ 和 Firefox3.5+的浏览器支持。可以将<script "file1.js" defer></script>放到页面任何一处,他将会在页面解析到<script>标签时才会并行下载,但是不会执行file1.js文件,知道DOM加载完成。下载的时候不会阻塞浏览器的其他进程。
异步加载
HTML5允许我们给 script 标签添加属性: "async" 来告诉浏览器不必停下来等待该脚本执行,什么时候下载完什么时候执行该脚本就可以了。这样的话浏览器会边下载js文件边渲染后面的内容。
当然如果file2.js需要依赖file1.js,那么file1.js就不能异步加载了。
<html>
<head>
<title>Script Example</title>
<script type="text/javascript" src="file1.js" async></script>
<script type="text/javascript" src="file2.js" async></script>
<script type="text/javascript" src="file3.js" async></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<p>Hello world!</p>
</body>
</html>
组织脚本
为了减少性能消耗,在大型的网站或者网络应用需要依赖数个js文件的时候。你可以把多个文件合成一个。例如:
<html>
<head>
<title>Script Example</title>
<link rel="stylesheet" type="text/css" href="styles.css">
<script type="text/javascript" >
/*写入相应的代码*/
</script>
</head>
<body>
<p>Hello world!</p>
<!-- 页面渲染完成后,下载执行js -->
<script type="text/javascript" src="http://yui.yahooapis.com/combo?file1.js&file2.js&file3.js"></script>
</body>
</html>
还可以将就多个文件进行合并压缩,http://ganquan.info/yui/?hl=zh-CN ,1个100kb的js文件下载比4个25kb的js文件更快。
结论:
当页面加载时在HTML head部分中的JavaScripts会在被调用的时候才执行,在HTML body部分中的JavaScripts会在页面加载的时候被执行。
在页面加载时我们需要让页面内容尽快呈现给用户,页面初始渲染所需要的JS和CSS可以直接在 <head> 标签中以代码形式插入。所有的外部文件引用可以放在页面内容之后,对于JS文件也可以采用异步 加载。
关于defer跟async的可以参考 http://www.cnblogs.com/xiaokk06/p/4966801.html
谈谈javascript放在哪里更合适的更多相关文章
- javascript学习(1)用户的Javascript 放在哪里和函数的绑定方式
一.实验 1:js脚本放在那里最合适? 1.代码 1.1.test.html <!DOCTYPE html><html> <head> < ...
- 挖掘更合适的MVP模式的架构设计
关于MVP,关于android,不得不说这篇博客已经来的非常晚了,这篇博客早就想写了,一直都在偷懒,就不给自己这么久的偷懒找借口了.尽管这篇文章po出来的比較晚.可是我所接触的程序猿一些朋友之 ...
- Effective Java 第三版——62. 当有其他更合适的类型时就不用字符串
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- javaScript放在head和body的区别
JavaScript写在哪里? 内部:Html网页的<body></body>中: 内部:Html网页的<head></head>中: 外部:外部js文 ...
- Java 编码规范 StandardCharsets.UTF_8 三个方法 toString() name() displayName(),到底用哪个方法更合适?
想用StandardCharsets.UTF_8 返回"UTF-8"这个字符,测试一下,三个方法toString() name() displayName(),均能返回" ...
- [转]JavaScript放在<head>和<body>的区别
原文:http://liminhappygirl.iteye.com/blog/1841360 javaScript放在<head>和<body>的区别: 在HTML body ...
- 谈谈javaScript
谈谈javaScript (杰我学习) 一. 什么是JavaScript 人们通常所说的JavaScript,其正式名称为ECMAScript.这个标准由ECMA组织发展和维护.ECMA ...
- 谈谈javascript中的prototype与继承
谈谈javascript中的prototype与继承 今天想谈谈javascript中的prototype. 通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性 ...
- R_针对churn数据用id3、cart、C4.5和C5.0创建决策树模型进行判断哪种模型更合适
data(churn)导入自带的训练集churnTrain和测试集churnTest 用id3.cart.C4.5和C5.0创建决策树模型,并用交叉矩阵评估模型,针对churn数据,哪种模型更合适 决 ...
随机推荐
- JAVA文件下载功能问题解决日志
今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了. 1.首先遇到的问题是:java后台的输出流输出之后,没有任何报错,浏览器端不弹出保存文件的对话框,原本是ajax请求到后台的con ...
- Ext.Net 学习随笔 002 默认按钮
在FormPanel中按回车按键,会触发默认按钮的click事件.设置方法为在FormPanel中设置DefaultButton属性,如果没有设置这个属性,默认为最后一个按钮. 1.缺省最后一个按钮为 ...
- 如何让Notepad++添加Python运行方式.精讲
原文来自金石开的文章,欲知详情请点击他昵称. 名为cncyber的博友,在此感谢他. 全部省略.正确命令是在原文的回复里,在此复制贴上: cmd /k cd /d "$(CURRENT_DI ...
- Android 从图库到选择图片onActivityResult接收注意的问题
从图库选择图片然后返回数据接收处理的时候,这个时候我们可能会遇到一个问题.就是明明我走了返回的代码.但是为什么我的图片路径没有拿到?这个时候可能是Android的api不同导致,因为Android4. ...
- android development
1. Supporting different devices 1) Supporting different screen size 主要有几点,首先是布局文件夹以及布局文件的命名 layout/m ...
- 不同编程语言打印“元旦快乐!"
javascript: document.write("元旦快乐!"+"<br/>"); PHP: <?php echo "元旦快乐 ...
- QT实现HTTP JSON高效多线程处理服务器
QT实现HTTP JSON高效多线程处理服务器 Legahero QQ:1395449850 现在一个平台级的系统光靠web打天下是不太现实的了,至少包含APP和web两部分,在早期APP直接访问we ...
- CentOS 6、7下pptp vpn一键安装脚本
之前有折腾过<CentOS 6.7下IPSEC/L2TP VPN一键安装脚本>,不稳定.不支持IOS,因此换成pptp,并已经添加到<lnmp一键安装包>.这个脚本可以单独使用 ...
- 介绍四款windows下的神器
四款神器:Q-dir, Cmder, Everything, launchy Q-dir Q-dir: windows自带资源管理器explorer的加强版.(windows自带的资料管理器explo ...
- web页面如何播放amr的音频文件
这个需求由来已久,公司的语音订单很多,每次客服都是从服务器down下语音来听.很不方便..于是我就上网扒拉看有么有什么web播放器能播放amr格式的音频文件,amr百度百科 总之找了很久.,,然后发现 ...