关于Javascript的多线程处理问题  

暴风雨来临的昨晚,偶的肚子继续跟WC坚持着鏖战。大晚上睡不着就看了一下标题这个纠结的问题,然后咔嚓到今天的现在。介个问题么~~~

Javascript是单线程跑的。不管怎么折腾都是。例如下面这种会卡掉的

var i = 0; 
while ( 1 ) { 
document.body.innerHTML += i++ + " <br>"; 
} 

上网一顿找,发现有一个强悍的哥们写了一个Javascript的多线程库。于是咱拿过来试试(PS:作者传送门你要是打不开,那是因为伟大的GFW哦~).

对上面的代码进行稍微的修改,结果变成:

<script type="text/javascript" src="Concurrent.Thread.js"> </script> 
<script type="text/javascript"> 
Concurrent.Thread.create(function(){ 
var i = 0; 
while ( 1 ) { 
document.body.innerHTML += i++ + " <br>"; 
} 
}); 
</script> 

跑一下看看,运行的很high,滚动条完全不受影响。但是就这么完美了么?我要解决的问题是ajax文件读取的卡机问题。用这玩意跑该卡还是卡,看了一下源代码竟然是模拟多线程,因为Javascript的根就是单线程的。

例如下面这个函数over了

function file(url)
{
    var xhr = new XMLHttpRequest(); 
    xhr.open("get",url,false); 
    xhr.overrideMimeType("text/html;charset=utf-8"); 
    xhr.send(''); 
    return xhr.responseText;
}

看了一下wiki自带了一个方法

<script type="text/javascript" src="Concurrent.Thread.js"></script> 
<script type="text/x-script.multithreaded-js"> 
var req = Concurrent.Thread.Http.get(url, ["Accept", "*"]); 
alert(req.responseText); 
</script> 

但是如果放入服务器的文件请求,该卡还是卡。最后没办法,用Object的lazy load搞吧,虽然兼容性不是特别好。Javascript优点多多,缺点也是不少的。下面放一个涂的很难看的样图吧,哈~~

image

js原大小500多k,我压缩了一下200多k,需要的自个下载吧。115传送门

请订阅本站 RSS feed 订阅到信箱 ,欢迎 Donate 或者 上面的广告内容 支持三十岁

本文链接:关于Javascript的多线程处理问题

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:三十岁,谢谢!^^


分享到:          
  • 通告关闭
  • 评论 (5)
  1. 可能是因为“no-reply@blog.30c.org 被当做垃圾邮件发送者

  2. 虽然说看不懂,不过半夜里挺无聊的,在rrs看到现在更新了,就过来看看了

    • 哈哈,都是夜猫子

      • 无语,提示邮件被扔到垃圾箱了,今天才看到~~

        • 额,怎么进入垃圾邮件了…

评论关闭