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 相关文章推荐
判断是否输入完毕再激活提交按钮
Jun 26 Javascript
JS实用的动画弹出层效果实例
May 05 Javascript
在AngularJS中使用AJAX的方法
Jun 17 Javascript
jquery实现select选择框内容左右移动代码分享
Nov 21 Javascript
JavaScript中的Number数字类型学习笔记
May 26 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
vue.js声明式渲染和条件与循环基础知识
Jul 31 Javascript
Vue 父子组件的数据传递、修改和更新方法
Mar 01 Javascript
基于Three.js实现360度全景图片
Dec 30 Javascript
JS前端广告拦截实现原理解析
Feb 17 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
Oct 21 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
Oct 27 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实现paypal 授权登录
2015/05/28 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
深入了解Python在HDA中的应用
2019/09/05 Python
python异常处理和日志处理方式
2019/12/24 Python
Python运行DLL文件的方法
2020/01/17 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
adidas美国官网:adidas US
2016/09/21 全球购物
护士求职推荐信范文
2013/11/23 职场文书
成绩单家长评语大全
2014/04/16 职场文书
公司门卫工作职责
2014/06/28 职场文书
真诚的求职信
2014/07/04 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
教书育人演讲稿
2014/09/11 职场文书
泰山导游词
2015/02/02 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
法制教育主题班会
2015/08/13 职场文书