《高級前端3.6》JavaScript多線程——Concurrent.Thread.js, WebWork


JavaScript多線程,在HTML5 WebWork沒出現之前很多人都是用ConcurrentThread.js模擬多線程。 

通常,我們也會用setInterval和setTimeout來模擬多線程。 

 

多線程的概念介紹

瀏覽器事件觸發線程,ajax,setTimeout,setInterval都會被放入最后面的一個程序池。

 

Concurrent.Thread.js

Concurrent.Thread.js是一個日本人開發的,用來讓javascript也進行多線程開發的包,可以讓我們將耗時的任務利用前端來模擬多線程。

下載地址:http://download.csdn.net/download/include_define/796952

教程文檔:http://www.cnblogs.com/0banana0/archive/2011/06/01/2067402.html

下面我們試一下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>JavaScript多線程</title>
 7     <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
 8     <script type="text/javascript" src="Concurrent.Thread.js"></script>
 9     <style type="text/css">
10     div {
11         width: 100px;
12         height: 100px;
13         cursor: pointer;
14         background: orange;
15     }
16     </style>
17 </head>
18 
19 <body>
20     <div id="test">
21         測試點擊
22     </div>
23     <script type="text/javascript">
24     Concurrent.Thread.create(function() {
25         $('#test').click(function() {
26             alert(1);
27         });
28         /*下面有一段特別復雜的函數*/
29         for (var i = 0; i < 10000; i++) {
30             console.log(i);
31         }
32     });
33     </script>
34 </body>
35 
36 </html>

可以發現,div能在打印i的時候正常響應了,非常牛掰的一個庫~~

 

 

WebWork

WebWork 是運行在后台的 JavaScript,獨立於其他腳本,不會影響頁面的性能。您可以繼續做任何願意做的事情:點擊、選取內容等等,而此時 web worker 在后台運行。

注意:dom是不能被異步操作的! WebWork不能在本地使用

HTML5之WebWork使用方法http://www.cnblogs.com/yxlblogs/p/3896786.html

 

webwork.html

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>JavaScript多線程</title>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <style type="text/css">
    div {
        width: 100px;
        height: 100px;
        cursor: pointer;
        background: orange;
    }
    </style>
</head>

<body>
    <div id="test">
        測試點擊
    </div>

    <script type="text/javascript">
    $('#test').click(function() {
        alert(1);
    });

    var worker = new Worker("task.js");
    worker.onmessage = function(event) {
        // 消息文本放置在data屬性中,
        // oBox.innerHTML = event.data;
        alert(event.data);
    }
    worker.postMessage(500000);
    </script>
</body>

</html>

 

task.js

onmessage = function(event) {
    var num = event.data;
    var result = 0;
    for (var i = 0; i < num; i++) {
        result += i;
        console.log(result);
    }

    // 向線程創建源送回消息
    postMessage(result);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM