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 相关文章推荐
jQuery 1.0.2
Oct 11 Javascript
JavaScript 读取元素的CSS信息的代码
Feb 07 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
原生js做的手风琴效果的导航菜单
Nov 08 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 Javascript
vue双向数据绑定原理探究(附demo)
Jan 17 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
May 20 jQuery
vue组件学习教程
Sep 09 Javascript
在vue中使用Autoprefixed的方法
Jul 27 Javascript
Jquery异步上传文件代码实例
Nov 13 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
php URL验证正则表达式
2011/07/19 PHP
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
php银联网页支付实现方法
2015/03/04 PHP
PHP中使用curl入门教程
2015/07/02 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
python实现问号表达式(?)的方法
2013/11/27 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
基于python绘制科赫雪花
2018/06/22 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
python超时重新请求解决方案
2019/10/21 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
卫校毕业生个人自我鉴定
2014/04/28 职场文书
健康状况证明书
2014/11/26 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
刘胡兰观后感
2015/06/16 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python