async和DOM Script文件加载比较


Posted in PHP onJuly 20, 2014

目前我用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

async和DOM Script文件加载比较
图1-1. 下载阻塞DomReady

async和DOM Script文件加载比较
图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>

在浏览器中加载的情况:

async和DOM Script文件加载比较
图2-1 异步下载 不阻塞DomReady 阻塞load事件

async和DOM Script文件加载比较
图2-2 执行阻塞load事件

async和DOM Script文件加载比较
图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');

在浏览器中加载的情况:

async和DOM Script文件加载比较
图3-1 下载阻塞load事件

async和DOM Script文件加载比较
图3-2 执行阻塞load事件

async和DOM Script文件加载比较
图3-3 IE9不阻塞load事件

小结

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

PHP 相关文章推荐
在WIN98下以apache模块方式安装php
Oct 09 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
解析Extjs与php数据交互(增删查改)
Jun 25 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
Apr 17 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 PHP
深入解析PHP中SESSION反序列化机制
Mar 01 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 #PHP
php多任务程序实例解析
Jul 19 #PHP
php实现斐波那契数列的简单写法
Jul 19 #PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 #PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 #PHP
CodeIgniter中实现泛域名解析
Jul 19 #PHP
php实现建立多层级目录的方法
Jul 19 #PHP
You might like
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
BootStrap中
2016/12/10 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
python实现给字典添加条目的方法
2014/09/25 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
用Python进行websocket接口测试
2020/10/16 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
一组SQL面试题
2016/02/15 面试题
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
大学生党员自我批评
2014/02/14 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
个人务虚会发言材料
2014/10/20 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
银行实习推荐信
2015/03/27 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers