Chinaunix首页 | 论坛 | 博客
  • 博客访问: 285944
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-20 14:44
文章分类

全部博文(124)

文章存档

2020年(1)

2018年(2)

2016年(2)

2015年(6)

2014年(10)

2013年(23)

2012年(7)

2011年(18)

2010年(15)

2009年(8)

2007年(8)

2006年(23)

2005年(1)

我的朋友

分类: JavaScript

2015-05-17 22:14:37

在javascript中,用户定义的函数都是单线程运行的,但是渲染部分交给浏览器后,就是多线程运行,其他先后顺序是不可控制的.
例如:

点击(此处)折叠或打开

  1. include=function(jsurl){
  2.     if (jsurl == null || typeof(jsurl) != 'string') return;
  3.     var js = document.createElement('script');
  4.     js.type = 'text/javascript';
  5.     js.charset = 'utf-8';
  6.     js.src = jsurl;
  7.     var heads=document.getElementsByTagName('head');
  8.     heads[0].appendChild(js);
  9. //实现2
  10.     document.write('');
  11.     console.info("include "+jsurl+" finished");
  12. }
代码用两个方法完成:前面是通过插入script节点; 第二个是通过document动态写入节点;

如果此时用第一种实现,当添加多个js文件时,会同时插入的head中,具体这些文件的加载是浏览器多线程控制的;不能保证加载顺序,{例如先include("a.js"),在include("b.js"),b中使用了A的定义的对象}
并不是先include的就先被加载(不能保证a先加载).所以如果此时需要加载的文件有依赖关系,会出现变量未定义的情况; 通过测试发现.即使先加载,后面也会出现未定义的情况,估计是多线程加载同步进行导致的;

对于第二中方法,可以保证生成先后的
以此为例,猜测其他的渲染也是同样的效果;即不一定是先append的元素先出现,当然这个时间差很小,界面上眼睛根本不能发现;
阅读(2690) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~