Javascript本不具备多线程特性,看了网上许多模拟多线程序的做法,多数是将任务拆分为小任务,这样可以将处理时间较为均等地分配到每个小任务,但实际处理中任务拆分实在太难,有的甚至无法处理。下面是IE中javascript遇到的现象,一起看看。
假如要用javascript动态生成一巨型树 (不考虑节点延迟加载),用一函数来做
function CreateTree(){
for(var i=0;i<n;i++{
var node=document.createElement("DIV");
node.innerText="********";
......
document.body.appentChild(node);
}
}
界面必须等函数运行结束后进行,也就是函数运行结束后才能看到界面。
如果在函数中启动定时器如:window.setTimeout 等处理界面生成问题,这些定时器的启动也是要等主函数执行完后才进行,这样看到的界面更新会大体分两面,第一步等函数处理完后,主函数处理的界面出现,下一步是定时器处理的界面出现,不过还是比全部放在主函数中处理好,因为可以把一些不重要的界面更新延迟处理(如树图中节点的连线),尽可能减少用户面对空白界面的时间。
基于单线程处理的原因,用javascript实现的进度条好像做成函数实时控制进度显示有一定的困难,因为在主函数中对进度条的所有更新需等主函数执行完以后才进行,这样只会在函数处理完以后看到进度条成为了100%而不会看到其变化过程序,失去进度条的作用,无奈只能用一GIF动画放在进度条中,让用户看一下动作,不至于太着急。
不过,IE中状态条的文字更新好象是实时进行的,有时可以充分利用一下。