在javascript中,用户定义的函数都是单线程运行的,但是渲染部分交给浏览器后,就是多线程运行,其他先后顺序是不可控制的.
例如:
-
include=function(jsurl){
-
if (jsurl == null || typeof(jsurl) != 'string') return;
-
var js = document.createElement('script');
-
js.type = 'text/javascript';
-
js.charset = 'utf-8';
-
js.src = jsurl;
-
var heads=document.getElementsByTagName('head');
-
heads[0].appendChild(js);
-
//实现2
-
document.write('');
-
console.info("include "+jsurl+" finished");
-
}
代码用两个方法完成:前面是通过插入script节点; 第二个是通过document动态写入节点;
如果此时用第一种实现,当添加多个js文件时,会同时插入的head中,具体这些文件的加载是浏览器多线程控制的;不能保证加载顺序,{例如先include("a.js"),在include("b.js"),b中使用了A的定义的对象}
并不是先include的就先被加载(不能保证a先加载).所以如果此时需要加载的文件有依赖关系,会出现变量未定义的情况; 通过测试发现.即使先加载,后面也会出现未定义的情况,估计是多线程加载同步进行导致的;
对于第二中方法,可以保证生成先后的
以此为例,猜测其他的渲染也是同样的效果;即不一定是先append的元素先出现,当然这个时间差很小,界面上眼睛根本不能发现;
阅读(2690) | 评论(0) | 转发(0) |