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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
Mar 10 PHP
thinkphp的c方法使用示例
Feb 24 PHP
php数组键名技巧小结
Feb 17 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
分享PHP守护进程类
Dec 30 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
PHP实现图片压缩
Sep 09 PHP
PHP实现的操作数组类库定义与用法示例
May 24 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读取MySQL数据代码
2008/06/05 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
php中static和const关键字用法分析
2016/12/07 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
js验证上传图片的方法
2015/05/12 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python基础语法(Python基础知识点)
2016/02/28 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python3爬楼梯算法示例
2019/03/04 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Python可以实现栈的结构吗
2020/05/27 Python
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
大学生创业计划书的格式要求
2013/12/29 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
继承公证书格式
2015/01/26 职场文书
公司会议开幕词
2016/03/03 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python