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 相关文章推荐
JavaScript 类型的包装对象(Typed Wrappers)
Oct 27 Javascript
JavaScript获取多个数组的交集简单实例
Nov 11 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
Jul 28 Javascript
Javascript实现汉字和拼音互转的终极方案
Oct 19 Javascript
JavaScript中object和Object的区别(详解)
Feb 27 Javascript
详解vue2.0组件通信各种情况总结与实例分析
Mar 22 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
Apr 21 Javascript
JavaScript实现图片无缝滚动效果
Jul 07 Javascript
js弹性势能动画之抛物线运动实例详解
Jul 27 Javascript
微信小程序实现根据字母选择城市功能
Aug 16 Javascript
Vue项目全局配置微信分享思路详解
May 04 Javascript
详解jQuery中的prop()使用方法
Jan 05 jQuery
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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
Python求出0~100以内的所有素数
2018/01/23 Python
Python中GIL的使用详解
2018/10/03 Python
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
小学教育毕业生自荐信
2013/11/18 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
公休请假条
2014/04/11 职场文书
《悯农》教学反思
2014/04/28 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
2015年征兵工作总结
2015/07/23 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js