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 相关文章推荐
JAVA/JSP学习系列之七
Oct 09 PHP
php设计模式 DAO(数据访问对象模式)
Jun 26 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
PHP分页详细讲解(有实例)
Oct 30 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
php实现文件编码批量转换
Mar 10 PHP
php获取当前页面完整URL地址
Dec 30 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
Laravel实现短信注册的示例代码
May 29 PHP
php实现微信企业付款到个人零钱功能
Oct 09 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+DBM的同学录程序(5)
2006/10/09 PHP
smarty自定义函数用法示例
2016/05/20 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
php解决安全问题的方法实例
2019/09/19 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
javascript工具库代码
2012/03/29 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
Python中的getopt函数使用详解
2015/07/28 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
无工作经验者个人求职信范文
2013/12/22 职场文书
建筑人员岗位职责
2013/12/25 职场文书
信息专业个人的自我评价
2013/12/27 职场文书
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
暑期研修感言
2014/02/17 职场文书
端午节演讲稿
2014/05/23 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
小学体育组工作总结
2015/08/13 职场文书
Nginx快速入门教程
2021/03/31 Servers
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server