js加载之使用DOM方法动态加载Javascript文件


Posted in Javascript onNovember 08, 2013

传统上,加载Javascript文件都是使用<script>标签。
就像下面这样:
<script type="text/javascript" src="example.js"></script>
js加载之使用DOM方法动态加载Javascript文件 
<script>标签很方便,只要加入网页,浏览器就会读取并运行。但是,它存在一些严重的缺陷。

(1)严格的读取顺序。由于浏览器按照<script>在网页中出现的顺序,读取Javascript文件,然后立即运行,导致在多个文件互相依赖的情况下,依赖性最小的文件必须放在最前面,依赖性最大的文件必须放在最后面,否则代码会报错。

(2)性能问题。浏览器采用"同步模式"加载<script>标签,也就是说,页面会"堵塞"(blocking),等待javascript文件加载完成,然后再运行后面的HTML代码。当存在多个<script>标签时,浏览器无法同时读取,必须读取完一个再去读取另一个,造成读取时间大大延长,页面响应缓慢。
为了解决这些问题,可以使用DOM方法,动态加载Javascript文件。

function loadScript(url){ 


var script = document.createElement("script"); 


script.type = "text/javascript"; 


script.src = url; 


document.body.appendChild(script); 

}

这样做的原理是,浏览器即时创造出一个<script>标签,然后"异步"读取Javascript文件。这样不会造成页面堵塞,但会造成另外一个问题:这样加载的Javascript文件,不在原始的DOM结构之中,因此在DOM-ready(DOMContentLoaded)事件和window.onload事件中指定的回调函数对它无效。
Javascript 相关文章推荐
document.onreadystatechange事件的用法分析
Oct 17 Javascript
基于jQuery的仿flash的广告轮播
Nov 05 Javascript
JavaScript 计算图片加载数量的代码
Jan 01 Javascript
直接拿来用的15个jQuery代码片段
Sep 23 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
Jul 22 Javascript
深入理解JavaScript中Ajax
Aug 02 Javascript
详解JavaScript树结构
Jan 09 Javascript
Vue项目中设置背景图片方法
Feb 21 Javascript
vue-cli 如何打包上线的方法示例
May 08 Javascript
layUI实现三级导航菜单效果
Jul 26 Javascript
vue数据响应式原理知识点总结
Feb 16 Javascript
Axios取消重复请求的方法实例详解
Jun 15 Javascript
javascript获取url上某个参数的方法
Nov 08 #Javascript
jqgrid 编辑添加功能详细解析
Nov 08 #Javascript
动态加载JS文件的三种方法
Nov 08 #Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 #Javascript
jQuery 获取和设置select下拉框的值实现代码
Nov 08 #Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
Nov 08 #Javascript
JavaScript中this的使用详解
Nov 08 #Javascript
You might like
FleaPHP的安全设置方法
2008/09/15 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python实现决策树分类算法
2017/12/21 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
Python的垃圾回收机制详解
2019/08/28 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
酒店执行总经理岗位职责
2013/12/15 职场文书
学习方法演讲稿
2014/05/10 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
工程部经理岗位职责
2015/02/02 职场文书
2016国庆促销广告语
2016/01/28 职场文书