解决HTML加载时,外部js文件引用较多,影响页面打开速度问题
解决HTML加载时,外部js文件引用较多,影响页面打开速度问题
通常HTML文件在浏览器中加载时,浏览器都会按照<script>元素在页面中出现的先后顺序,对它们依次加载,一旦加载的js文件数量过多,就会导致页面展示延迟。那么,在开发的过程中,改怎么解决呢?
首先,我们看一看传统中js加载的做法,所有的<script>元素都应该放在页面的<head>元素中,例如:
- <!DOCTYPE html>
- <html>
- <head>
- <title>HTML js应用</title>
- <meta http-equiv="Content-type" content="text/html; charset=GBK"></meta>
- <script type="text/javascript" src="example1.js"></script>
- <script type="text/javascript" src="example2.js"></script>
- </head>
- <body>
- <div>
- <h1>好好学习,天天向上</h1>
- </div>
- </body>
- </html>
这种做法的目的就是把所用的外部文件(包括CSS文件和js文件)的引用都放在相同的地方。可是,在文档的<head>元素中包含所有JavaScript文件,意味着必须等到全部JavaScript代码都被下载、解析和执行完成以后,才能开始呈现页面的内容。而对于需要很多JavaScript文件的页面来说,无疑会出现页面展示延迟现象。下面我给出3种解决方案:
方案一、改变标签的位置
我们把<script>元素引用放在<body>元素中,如下例所示:
- <!DOCTYPE html>
- <html>
- <head>
- <title>HTML js应用</title>
- <meta http-equiv="Content-type" content="text/html; charset=GBK"></meta>
- </head>
- <body>
- <div>
- <h1>好好学习,天天向上</h1>
- </div>
- <script type="text/javascript" src="example1.js"></script>
- <script type="text/javascript" src="example2.js"></script>
- </body>
- </html>
这样,在解析包含的JavaScript代码之前,页面的内容将完全展示在浏览器中。而用户也会因为浏览器窗口显示空白页面的时间缩短而感到打开的速度加快了。
方案二、在<script>元素中加延迟脚本
HTML4.01为<script>标签定义了defer属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面解析完成后再运行。因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。下面看代码实现:
- <!DOCTYPE html>
- <html>
- <head>
- <title>HTML js应用</title>
- <meta http-equiv="Content-type" content="text/html; charset=GBK"></meta>
- <script type="text/javascript" defer="defer" src="example1.js"></script>
- <script type="text/javascript" defer="defer" src="example2.js"></script>
- </head>
- <body>
- <div>
- <h1>好好学习,天天向上</h1>
- </div>
- </body>
- </html>
在这个例子中,虽然我们把<script>元素放在了文档的<head>元素中,但其包含的脚本将延迟到浏览器遇到</html>标签后再执行。HTML5规范要求脚本按照它们出现的先后顺序执行加载。
方案三、在<script>元素中加异步脚本
HTML5为<script>元素定义了async属性,这个属性与defer属性类似,都用于改变处理脚本的行为。async与defer类似,只适用于外部脚本文件,并告诉浏览器立即下载文件。但与defer不同的是,标记为async的脚本并不保证按照指定它们的先后顺序执行。如下例:
- <!DOCTYPE html>
- <html>
- <head>
- <title>HTML js应用</title>
- <meta http-equiv="Content-type" content="text/html; charset=GBK"></meta>
- <script type="text/javascript" async src="example1.js"></script>
- <script type="text/javascript" async src="example2.js"></script>
- </head>
- <body>
- <div>
- <h1>好好学习,天天向上</h1>
- </div>
- </body>
- </html>
在XHTML文档中,要把async属性设置为async="async"。
解决HTML加载时,外部js文件引用较多,影响页面打开速度问题的更多相关文章
- JQuery 加载 CSS、JS 文件
JS 方式加载 CSS.JS 文件: //加载 css 文件 function includeCss(filename) { var head = document.getElementsByTagN ...
- 使用getScript()方法异步加载并执行js文件
使用getScript()方法异步加载并执行js文件 使用getScript()方法异步请求并执行服务器中的JavaScript格式的文件,它的调用格式如下所示: jQuery.getScript(u ...
- 解决加载WEB页面时,由于JS文件引用过多影响页面打开速度的问题
1.一般做法 一般我们会把所有的<script>元素都应该放在页面的<head>标签里,但由于是顺序加载,因此只有当所有JavaScript代码都被依次下载.解析和执行完之后, ...
- 用JavaScript动态加载CSS和JS文件
本文转载自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/11/14/2248451.html 今天项目中需要用到动态加载 CSS 文件 ...
- 通过特殊处理 Resize 事件解决 WinForm 加载时闪烁问题的一个方法
WinForm 上放置的控件多了或者有大背景图,窗体加载时就会闪烁,对于一般的闪烁,设置 DoubleBuffer=True或许有一点改善,要立竿见影的解决可以重载 CreateParams 使用 W ...
- android报错及解决1--Bitmap加载时,报bitmap size exceeds VM budget
报错描述: 用Bitmap加载图片资源时,报错java.lang.OutOfMemoryError: bitmap size exceeds VM budget 原因分析: android系统限制,只 ...
- 火狐浏览器怎么查看页面加载了那些js文件,那系js文件有作用
方法一: 右击查看原代码,点击js链接如果能够看到文件内容,证明加载成功 方法二: 按F12键,如果控制台没有加载错误,证明加载成功:
- JavaScript动态加载CSS和JS文件
var dynamicLoading = { css: function(path){ if(!path || path.length === 0){ throw new Error('argumen ...
- 动态加载CSS,JS文件
var Head = document.getElementsByTagName('head')[0],style = document.createElement('style'); //文件全部加 ...
随机推荐
- 调试:Spring AOP执行过程
调试项目:https://github.com/1367356/laboratoryWeb 断点位置 点击查询:http://localhost:9002/queryNews?htmlid=15318 ...
- git-flow工作流程
什么是 git-flow? 一旦安装安装 git-flow,你将会拥有一些扩展命令.这些命令会在一个预定义的顺序下自动执行多个操作.是的,这就是我们的工作流程! git-flow 并不是要替代 Git ...
- oracle 保留小数位
方法一:使用to_char的fm格式 to_char(round(data.amount,2),'FM9999999999999999.00') as amount 不足之处是,如果数值是0的话,会显 ...
- gitlab卸载
1.停止gitlab gitlab-ctl stop 2.卸载gitlab(注意这里写的是gitlab-ce) rpm -e gitlab-ce 3.查看gitlab进程 ps aux | grep ...
- linux安装Navicat,界面出现乱码解决方法
下载Navicat:navicat112_mariadb_cs_x64.tar.gz 点击" ./start_navicat"安装出现界面便面为乱码 解决办法:打开start_na ...
- 系统管理命令之whoami
whoami命令用于打印当前有效的用户名称,相当于执行id --un命令. 1.显示该命令帮助信息: # whoami --help 2.显示该命令的版本信息: # whoami --version ...
- uva11324 有向图的强连通分量+记忆化dp
给一张有向图G, 求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足,要么u可以到达v, 要么v可以到达u(u和v相互可达也可以). 因为整张图可能存在环路,所以不好使用dp直接做,先采用 ...
- hdu5072 容斥+枚举
这题说的是给了 n 个数字 每个数值大于1 小于100000,n小于100000 ,找出满足下面要求的三人组有多少种 比如abc ( (ab)==(bc)==(ac) ==1 )||( (ab)!=1 ...
- 钉钉,连续获取Token一样么? Js_ticket重复获取一样么?
经过测试,是一样的: Token的过期时间是2个小时: 2个小时后在获取则发生变化: js_ticket: 重复获取的值不同的:
- Qt+json
Json文件是这样: { "first fruit": { "describe":"an apple", "icon": ...