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 相关文章推荐
php session应用实例 登录验证
Mar 16 PHP
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
PHP字符串中特殊符号的过滤方法介绍
Feb 18 PHP
ThinkPHP之getField详解
Jun 20 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
Zend Framework教程之视图组件Zend_View用法详解
Mar 05 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 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查找任何页面上的所有链接的方法
2013/12/03 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
js断点调试经验分享
2017/12/08 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python单链表的简单实现方法
2014/09/23 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
python 同时运行多个程序的实例
2019/01/07 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
如何用python免费看美剧
2020/08/11 Python
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
物流专业大学的自我评价
2014/01/11 职场文书
护士节活动总结
2014/08/29 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
2014业务员年终工作总结
2014/12/09 职场文书