H5多線程Worker

前言

javascript(以下簡稱js)是單線程語言,之所以是單線程,是因爲他的作用是用來跟用戶互動的,如果多線程,同時修改頁面上的Dom,則會出錯,開發起來會很複雜。

但是隨着js的作用越來越大,終端要求越來越高,我們是不是有些程序可以多線程處理,當然有,那就是H5的worker,那這樣的話豈不是跟上面說的矛盾了?請接着往下看!

下面我們將用一個列子先來實現worker,worker的API我就不說了,網上都查得到。這裏我主要用兩個方法,一個是onmessage(接收)、postMessage(發送)

主線程代碼

<body>
    <input type="text" id="num">
    <button id="but">計算</button>
    <script>
        window.onload = function() {
            var but = document.getElementById('but')
            var num = document.getElementById('num')
            but.onclick = function() {
                var n = num.value

                var worker = new Worker('worker.js')	// 註冊worker實例,傳入workerjs文件路徑
                worker.onmessage = function(event) {	// 接收worker傳來的消息
                    alert(event.data)
                }

                worker.postMessage(n)	// 向worker發送消息
            }
        }
    </script>
</body>

分線程代碼(worker.js)

注:在分線程JS中,無法訪問window全局下的方法與屬性,這個目的就是我們上面所說,不能多線程修改DOM,我們可以把複雜的計算用分線程來處理,當然,當前用得比較少,因爲還是有些不好的地方。
比如:

  1. 跟主線程比,計算會慢些
  2. 不能跨域加載
  3. 不能更新DOM
  4. 兼容性不友好(具體兼容哪些,大家去查查)
onmessage = function(event){	// 接收消息
    var result = fibonacci(event.data)
    postMessage(result)		// 發送消息
}

// 計算
function fibonacci(n){
    return n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2)
}

注:愛護原創,轉載請說明出處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章