谈谈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数据,哪种模型更合适 决 ...
随机推荐
- SPOJ-SUBST1 New Distinct Substrings(后缀数组)
题目大意:判断总共有多少种不同的子串. 题目分析:不同的子串数目为 Σ(后缀SA[i]的长度-height[i]). 代码如下: # include<iostream> # include ...
- 如何用Selenium 向CodeMirror 编辑器输入
用Selenium 自动填写Jenkins上面一个文本输入框,通过css定位很容易,但是输入文字的时候会报错 ElementNotVisibleException: Message: Element ...
- [leetcode] 根据String数组构造TreeNode,用于LeetCode树结构相关的测试用例
LeetCode 跟树结构相关的题目的测试用例中大多是通过String数组来构造树.例如{2,#,3,#,4,#,5,#,6},可以构造出如下的树(将树结构逆时针选择90度显示): 6 ...
- MATLAB 绘图时的相关心得
matlab中如何调整legend的位置? legend('sinx',-1); %----位于图形框外面-----------------------legend('sinx',0);------- ...
- 微信Android客户端架构演进之路
这是一个典型的Android应用在从小到大的成长过程中的“踩坑”与“填坑”的历史.互联网的变化速度如此之快,1年的时间里,可以发生翻天覆地的变化.今天在这里,重新和大家回顾微信客户端架构的演进过程,以 ...
- 5G扫盲
打开手机,连接wifi,如果想要下载一部自己喜欢的高清电影,一般需要半小时左右的时间.5G时代,你可能花费不到1分钟就能完成这些操作.更快的网速.更多的应用意味着更广阔的市场空间,也意味着更激烈的市场 ...
- Window memcache 使用
一.memcache配置 1. 下载memcache 32位系统 1.2.5版本:http://static.runoob.com/download/memcached-1.2.5-win32-bin ...
- winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法。
protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle ...
- [转]MySQL Connector/C++(一)
http://www.cnblogs.com/dvwei/archive/2013/04/18/3029464.html#undefined#undefined MySQL Connector/C++ ...
- zepto.js使用前注意
API:http://www.css88.com/doc/zeptojs_api/ 一.建议:不要从官网下载,而是从 Github 下载了源代码之后自己 Build 一个版本,这样你可以自行挑选适合的 ...