关于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优点多多,缺点也是不少的。下面放一个涂的很难看的样图吧,哈~~
js原大小500多k,我压缩了一下200多k,需要的自个下载吧。115传送门
分享到: | |
可能是因为“no-reply@blog.30c.org 被当做垃圾邮件发送者
虽然说看不懂,不过半夜里挺无聊的,在rrs看到现在更新了,就过来看看了
哈哈,都是夜猫子
无语,提示邮件被扔到垃圾箱了,今天才看到~~
额,怎么进入垃圾邮件了…