在许多情况下,需要使用动态插入脚本的方式

1. 跨域访问:不同域下的脚本不能够通过该AJAX方式直接获得

2.延迟加载或预加载:由于浏览器会等所有外链脚本加载完才开始解析。为了提高用户响应速度和用户体验

应该让那些暂时不用的脚本延迟加载。另外在欢迎页面中可以使用预加载的方式先将以后要用到的脚本下载到本地。

3.灵活条件加载: 许多脚本需要根据用户的环境或者用户的行为条件加载一些脚本。

4. 加载顺序逻辑: 有些脚本之间加载顺序必须按照严格的顺序。此时使用动态加载的方式更好的控制这种逻辑。

5.提高并发速度:大部分浏览器都会对脚本加载线程数量加以控制,而使用动态加载的方式能够增加并发下载数量。

5. XHR方式动态加载能够提高动态脚本的解析性能。

使用插入script标签的方式动态加载脚本

function loadJS(url, func){

var head=document.getElementsByTagName('head').item(0);

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

script.src=url;

script.type='text/javascript';

script.defer=true;

script.onload = func;

void(head.appendChild(script));

}

//顺序加载JS,按照js_arr数组给定的顺序加载js文件

function squenceLoad(js_arr){

var uid = $_GET("uid");

//内部函数可共享闭包中的作用域,可以共享 js_arr数组

var callback = function(){

var url = js_arr.shift();

if(url){ loadJS(url, callback);  }

}

//间接递归方式调用 loadJS , callback

loadJS(js_arr.shift(), callback);

}

//调用顺序加载的例子

document.onload = function(){

var js_arr =["p.php?uid=0 ","p.php?uid=1","p.php?uid=2","p.php?uid=3"];//JS 加载链

squenceLoad(js_arr);

}

//XHR脚本注入方式异步执行脚本

// 原理是通过修改

而且要比前面介绍的方法更为灵活。脚本的内容可以是 拼接的语句,也可以是ajax获得的内容

function XHR( data){

var head=document.getElementsByTagName('head').item(0);

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

script.text=data;

void(head.appendChild(script));

}

///eval方式动态执行脚本的方式, 使用eval解析脚本的限制很多,首先复杂语句必须是括号包含的结构。同时eval的执行与执行的上下文也有关系。而且eval的效率较低。不过这种方法是ajax中动态获得数据的最常用的方式。

function execute(data){

window.eval("("+data+")");

}

java动态加载js_动态加载JavaSript相关推荐

  1. 动态加载js_异步加载js

    1 动态创建script节点 如下代码,可在浏览器F12控制台输入,可以在当前网页引入jquery,如下方法是异步执行 var theHead = document.getElementsByTagN ...

  2. java spring包_java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式...

    java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式 发布时间:2018-08-20 12:02, 浏览次数:774 , 标签: java spri ...

  3. java 类 重新加载_Java动态类加载和重新加载的详细介绍

    本篇文章给大家带来的内容是关于Java动态类加载和重新加载的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Java中可以在运行时加载和重新加载类,虽然并不像我们想像中那么简 ...

  4. 【Android 逆向】加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )

    文章目录 一.动态加载 二.第一代加壳技术 ( DEX 整体加固 ) 三.第二代加壳技术 ( 函数抽取 ) 四.第三代加壳技术 ( Java 函数 -> Native 函数 ) 五.so 动态库 ...

  5. go语言 不支持动态加载_动态语言支持

    go语言 不支持动态加载 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. 它 ...

  6. 懒加载和预加载的区别_类的动态创建(ro,rw)amp; 懒加载类和非懒加载类底层加载的区别 amp; 类和分类的搭配分析...

    黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨OSMin链接:https://juejin.im/post/5 ...

  7. WEB——BaseDao、注解、Servlet3.0、动态代理、类的加载器

    **编写BaseDao**          1.dao持久层怎么来写的?     2.编写通用的BaseDao,其他的Dao的持久层继承BaseDao,提供增删改查的方法了.          3. ...

  8. ELF文件的加载和动态链接过程

    本文的目的:大家对于Hello World程序应该非常熟悉,随便使用哪一种语言,即使还不熟悉的语言,写出一个Hello World程序应该毫不费力,但是如果让大家详细的说明这个程序加载和链接的过程,以 ...

  9. 动态加载和静态加载及其编译步骤

    在类unix操作系统中,驱动加载方式一般分为:动态加载和静态加载,下面分别对其详细论述. 一.动态加载 动态加载是将驱动模块加载到内核中,而不能放入/lib/modules/下.     在2.4内核 ...

最新文章

  1. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
  2. 斐波那契数列递归解法
  3. ASP.NET Core Web API 索引 (更新Identity Server 4 视频教程)
  4. linux内核工程师必须知道的三十道题
  5. 赛锐信息:SAP系统业务审计介绍
  6. .NET 工具生成引擎概述
  7. Hacker News的全文输出RSS地址
  8. 如何使用powerdesigner导出sql脚本
  9. python批量修改文件内容(修改文件指定行)
  10. 线性调频(LFM信号)脉冲压缩雷达matlab仿真- 脉冲压缩 测距 测速 距离速度三维像(附matlab代码)
  11. WLAN驱动分析文档
  12. css3 3d特效汇总
  13. ThinkPHP门面源码解析
  14. Mac Docker配置阿里云镜像(最新)
  15. PHP设计模式之观察者模式
  16. 在ACM的巨坑里挣扎的弱鸡整理的模板
  17. 管理信息系统基础知识点
  18. 未来教育计算机二级c语言jd,逻辑思维训练地址_未来教育中心
  19. PHP中给数组中追加元素
  20. 中国移动手机桌面助理 v1.0.0 下载

热门文章

  1. IntelliJ IDEA2021.1详细配置图解之Appearance Behavior ,KeyMap
  2. [附源码]Python计算机毕业设计超市销售管理系统Django(程序+LW)
  3. 股票量化模型公式操作说明
  4. 反激电路元器件参数的运算公式
  5. 奇偶校验码和海明码原理
  6. 我国工程项目的前期管理(转)
  7. 大学计算机基础 薛礼答案,大学计算机基础课程教学的模式的探讨.doc
  8. oracle9i连不上10g,oracle 10g客户端连接oracle 9i数据库
  9. 30款精美的矢量花纹素材
  10. [软件评测第十二期]遨游浏览器