当前位置: 首页 > 编程笔记 >

async和DOM Script文件加载比较

厍华清
2023-03-14
本文向大家介绍async和DOM Script文件加载比较,包括了async和DOM Script文件加载比较的使用技巧和注意事项,需要的朋友参考一下

目前我用demo.js作为执行文件操作.代码

var now = function() { return +(new Date()); }
var t_s = now();
while(now() - t_s < 2000) { }

用sleep.php作为请求文件操作。代码:

<?php
  sleep(3);
  echo 'var bb';
?>

1. 一般script标签加载

<script src="demo.js"></script>
<script src="sleep.php"></script>

在浏览器加载情况: 图1-1. 下载阻塞DomReady 图1-2. 执行阻塞DomReady


图1-1. 下载阻塞DomReady


图1-2. 执行阻塞DomReady

2. async属性

async是html5中新增的属性,它的作用是能够异步下载脚本文件,不阻塞DOMReady。

每一个async属性的脚本都在它下载结束之后立刻执行,同时会在window的load事件之前执行。所以就有可能出现脚本执行顺序被打乱的情况

支持async浏览器: Firefox 3.6+, IE 10+, Chrome 2+, Safari 5+, iOS 5+, Android 3+

<script src="demo.js" async></script>
<script src="sleep.php" async></script>  

在浏览器中加载的情况:


图2-1 异步下载 不阻塞DomReady 阻塞load事件


图2-2 执行阻塞load事件


图2-3 IE9不支持async属性下载阻塞DomReady

3. DOM Script动态加载

文档对象模型(DOM)允许您使用 JavaScript 动态创建 HTML 的几乎全部文档内容。 script元素与页面其他元素一样,可以非常容易地通过标准 DOM 函数创建:

var loadScript = function(url) {
 var s = document.createElement('script');
 s.type = 'text/javascript';
 s.async = 'true';
 s.src = url;
 document.getElementsByTagName('head')[0].appendChild(s); 
}
// 加载js文件脚本
loadScript('sleep.php');
loadScript('demo.js');

在浏览器中加载的情况:


图3-1 下载阻塞load事件


图3-2 执行阻塞load事件


图3-3 IE9不阻塞load事件

小结

async和script动态加载在现代浏览器中加载的情况是一致的。前者使用简单,后在兼容性方面更好。 异步加载文件还有很多方法,ajax(会受到同源限制)、iFrame、img…

 类似资料:
  • 问题内容: 我们可以将CSS编写为以下类型: 内联CSS 嵌入式CSS 外部CSS 我想知道每种方法的优缺点。 问题答案: 正如我所看到的,这都是关于在管线中需要CSS的位置。 1.内联CSS 优点: 非常适合快速修复/原型制作和简单测试,而无需在.css文档和实际HTML文件之间来回切换。 优点: 由于可能的垃圾邮件/滥用行为,许多电子邮件客户端不允许使用外部.css引用。嵌入可能会有所帮助。

  • 本文向大家介绍JavaScript无阻塞加载和defer、async详解,包括了JavaScript无阻塞加载和defer、async详解的使用技巧和注意事项,需要的朋友参考一下 无阻塞加载 把js放在head里,浏览器是怎么去执行它的呢,是按顺序加载还是并行加载呢?在旧的浏览器下,都是按照先后顺序来加载的,这就保证了加载的js依赖不会发生问题。但是少部分新的浏览器已经开始允许并行加载js了,也就

  • 主要内容:加载现有的PDF文档,第1步:加载现有的PDF文档,示例在前面的例子中,已经学习了如何创建一个新文档并向其中添加页面。 本章将教您如何加载系统中已经存在的PDF文档,并对其进行一些操作。 加载现有的PDF文档 类的方法用于加载现有的PDF文档。 按照以下步骤加载现有的PDF文档。 第1步:加载现有的PDF文档 使用类的静态方法加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态方法,可以直接使用类名称调用它,如下所示。 第2步:执行

  • 我需要一个POJO方法来异步执行,所以我用Async注释了它。我已使用适当的组件扫描将启用同步添加到我的配置类中。这里有一个供您运行的小测试用例。 上面的代码将加载注释ConfigApplicationContext并退出。然而,如果我取消注释((AsyncBean)o)。doStuff() ,那么它将在单独的线程中运行。为什么配置完全读取时,异步方法没有启动?这就是我所期望的。 我在上面留了一些

  • > 在Eclipse中新建EMF项目 导入xmi架构:xmi.xsd,并获取xmi.genmodel文件 使用xmi.genmodel生成eclipse中的所有代码,它将生成模型代码 新建一个Junit4测试用例,并尝试用Junit插件测试加载xmi-model.xmi文件,但失败了,下面是我的代码。 例外情况是: 好的,然后我试着去读xsd文件和xmi文件,我发现在xmi-model.xmi里面

  • 我正在使用webpack管理reactjs项目。我想通过webpack