动态脚本元素

动态脚本元素即在js中去创建<script>标签加载外部js并执行,这样加载的好处是文件的下载和执行过程不会阻塞页面的其他进程。通过下面两个例子对比出效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Untitled Page</title>
<script src="1.js"  type="text/javascript"></script>
<script type="text/javascript">
    window.onload = function () {
        var i = 0;

        while (i < 1000000000) {
            i++;
        }

        alert("内部js");
    }
</script>
</head>
<body>
    <div id="aa" style="color: Red; font-size: 200px;">
        测试js加载顺序影响的性能问题。【放在底部加载】
    </div>
</body>
</html>

  A.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Untitled Page</title>
<script type="text/javascript">
    window.onload = function () {
        loadScript("1.js",function(){alert("加载外部js完成")})
		var i = 0;

        while (i < 1000000000) {
            i++;
        }

        alert("内部js");
    }
		function loadScript(url,callback){
		var script=document.createElement("script");
		script.type="text/javascript";
		if(script.readyState){
			script.onreadystatechange=function(){
				if(script.readyState=="loaded" || script.readyState=="complete"){
					script.onreadystatechange=null;
					callback();
				}
			};
		}else{
			script.onload=function(){
				callback();
			};
		}
		script.src=url;
		document.getElementsByTagName("head")[0].appendChild(script);
	}
</script>
</head>
<body>
    <div id="aa" style="color: Red; font-size: 200px;">
        测试js加载顺序影响的性能问题。【放在底部加载】
    </div>
</body>
</html>

  B.html

var i = 0;

while (i < 1000000000) {
    i++;
}
alert("外部js");

  1.js

进过执行后会发现,A.html执行结果为 alert("外部js")  alert("内部js")  render树渲染

B.html执行结果为 alert("内部js")   render树渲染   alert("外部js")  alert("加载外部js完成")

通过结果对比后,理解不阻塞页面其他进程更加直观

除了动态加载js外,还有XMLHttpRequest对象获取脚本也是无阻塞的,示例代码如下

var xhr=new XMLHttpRequest();
xhr.open("get","1.js",true);
xhr.onreadystatechange=function(){
      if(xhr.readyState==4)      {
           if(xhr.status >= 200 && xhr.status<300 || xhr.status == 304){
                    var script=document.createElement("script");
                    script.type="text/javascript";
                    script.text=xhr.responseText;
                    document.body.appendChild(script);
           }
      }
}
xhr.send(null);

  

时间: 2024-10-14 03:24:50

动态脚本元素的相关文章

动态脚本

前面的话 动态脚本是指在页面加载时不存在,但将来的某一时刻通过修改DOM动态添加的脚本.和操作HTML元素一样,创建动态脚本也有两种方式:插入外部文件和直接插入内部javascript代码.下面将详细介绍这两种情况 外部脚本 //script.js里面的内容 box.style.color = "red"; var script = document.createElement("script"); script.type = "text/javascri

JSP基本语法总结【1】(jsp工作原理,脚本元素,指令元素,动作元素)

时隔半年,回头对jsp复习整理一下,温故而知新. jsp工作原理: jsp服务器管理jsp页面分两个阶段:转换阶段(translation phase)和执行阶段(execution phase). 客户发送请求时,服务器检验jso语法是否正确,然后转换成servlet源文件,然后调用javac工具类便宜servlet源文件生成class文件,此阶段为转换阶段. 接下来,servlet容器加载转换后的servlet类,实例化一个对象来处理客户端的请求.请求处理后,响应对象被jsp服务器接收,服务

DOM操作技术----动态脚本

创建动态脚本有两种方式:插入外部文件和直接插入JavaScript代码 方式一:插入外部文件 <script type="text/javascript" src="client.js" ></script> 创建此节点的DOM代码等同于: var script = documen.createElement("script"); script.type="text/javascript"; scrip

【前端基础】动态脚本与JSONP

博主入职两个月了,越来越感受到打好基础对于前端工程师的重要性,在向着狂拽酷炫的框架&构建工具狂飚之前,必须有一个坚实的基础打底,才不至于轻易翻车.所以博主最近一直在恶补<JS高级程序设计>,发现了很多第一次读时忽略的.有趣的地方.不愧是经典,常读常新呀! PART 1  最熟悉的陌生人--动态脚本 对于一些刚接触前端不久的同学来说,"动态脚本"可能是一个有些陌生的字眼,我也是偶然看高程,才想起同桌的你--不,才注意到这个技术.但事实上,这是每个前端每天都会用到的技术

浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入

在<浏览器环境下JavaScript脚本加载与执行探析之defer与async特性>中,我们研究了延迟脚本(defer)和异步脚本(async)的执行时机.浏览器支持情况.浏览器bug以及其他的细节问题.而除了defer和async特性,动态脚本和Ajax脚本注入也是两种常用的创建无阻塞脚本的方法.总的来看,这两种方法都能达到脚本加载不影响页面解析和渲染的作用,但是在不同的浏览器中,这两种技术所创建的脚本的执行时机还是有一定差异,今天我们再来探讨一下通过动态脚本技术和Ajax注入的脚本在这些方

JavaWeb学习(二)----JSP脚本元素、指令元素、动作元素

?[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4048033.html 联系方式:[email protected] [正文] 我们在上一篇文章中学习到了Tomcat的使用和工程文件部署,并明白了jsp文件是怎样发布到服务器上并最终显示出来:JavaWeb学习(一)----JSP简介及入门(含Tomcat的使用) 现在来学习一下JSP的基本语法

JSP基础总结 脚本元素

JSP脚本元素 1.  JSP声明语句 JSP声明语句以<%!开始,以%>结束,其语法格式为:<%! 声明语句 %> 使用声明语句的变量为全局变量,也就是说,当有多个用户在执行此JSP页面时,将共享该变量. 2.  JSP Scriptlets JSP Scriptlets以<%开始,以%>结束,其中包含有效地符合Java语法规则的Java代码,其语法格式为:<% Java代码 %>.在JSP Scriptlets中可以包含多个语句,如:方法.变量.表达式等

iOS 实现脉冲雷达以及动态增减元素 By Swift-感谢分享

Swift经过Xcode6 Beta4一版更新后,基本上已经可以作为生产工具了,虽然有一些地方和ObjC比起来要“落后”一些,但也无伤大雅.这里就用Xcode6 Beta4+iOS SDK 8.0开发,如果用ObjC的话,只需把某些语法和调用方式替换一下就可以了. 最终效果: 这效果是从MOV文件转成GIF的,而且CSDN不支持大于2M的图片上传,优酷地址 创建基本动画 这效果是从MOV文件转成GIF的,而且CSDN不支持大于2M的图片上传,优酷地址 创建一个Single View Applic

JavaScript 动态脚本

动态脚本,指的是在页面加载时不存在,但将来的某一个时刻通过修改DOM动态添加的脚本. <script type="text/javascript"> function loadScriptString(code){ var script = document.creatElement("script"); script.type("text/javascript"); document.body.appendChild(script)