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 相关文章推荐
30个最好的jQuery 灯箱插件分享
Apr 25 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
举例详解JavaScript中Promise的使用
Jun 24 Javascript
基于JavaScript实现一定时间后去执行一个函数
Dec 14 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
Jul 21 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
Jan 22 Javascript
详解angular中通过$location获取路径(参数)的写法
Mar 21 Javascript
JS实现动态给标签控件添加事件的方法示例
May 13 Javascript
浅谈React和Redux的连接react-redux
Dec 04 Javascript
微信小程序支付PHP代码
Aug 23 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
在vue中阻止浏览器后退的实例
Nov 06 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
PHP网站备份程序代码分享
2011/06/10 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
js实现转动骰子模型
2019/10/24 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python中集合类型(set)学习小结
2015/01/28 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
高效使用Python字典的清单
2018/04/04 Python
详解Python self 参数
2019/08/30 Python
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
军训 自我鉴定
2014/02/03 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
毕业生入职感言
2015/07/31 职场文书
工作一年自我鉴定
2019/06/20 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
美元符号 $
2022/02/17 杂记