webwork**
都知道js是單執行緒語言,最讓人頭疼的莫過於在網路正常的情況下經常出現頁面的假死,
以及在進行大量的for迴圈計算時會導致執行緒阻塞,由於要進行大量的計算js後面的執行會被阻隔在此處,使得效能較差,**維護性差等一系列的問題發生。
本人也看了很多關於webwork的demo和官方的講解,都說是官方很多都不是很容易讀懂,在最近幾天的學習過程我也針對這個做了些功課發現了webwork的作用非同一般!
let worker = new worker("work.js")//此處寫待處理的位址
let data = [1, 2, 3, 4, 5, 6, 7]
worker.postmessage(data);
worker.onmessage = function(event)
//此部分是work.js中
this.addeventlistener("message", (data) => )
function render(data) `
});return str
}
正如您所看到的,這就是乙個簡單的demo:
但是你在之後再補一句簡單的console.log(1)就能夠看出結果了,
開啟f12(傳說中的開發者模式)你會驚奇的發現單執行緒語言居然先輸出了1然後在ul中新增了節點,
照以前的寫法我們肯定會這樣做:
let str = "";
data.foreach(i => `
});document.queryselector("ul").innerhtml = str;
是不是發現了其中的好處?
簡單來說我們把一套本該同步的**該成了非同步,也就是在主線程中開闢了一條子執行緒,這樣的好處就是不會影響主線程,執行緒任務的執行,具體步驟在子執行緒中進行,最後返回結果給主線程中,很巧妙的解決了之前上文提到的,假如在主線程中我有個任務迴圈了10000次(當然是開玩笑!)這時webwork是不是很巧妙的處理了這個問題呢?
結尾:
為什麼要這麼做?
隨著web的發展,時代越來越講究優化二字,能夠用更加優雅的**,更加簡潔的**去完成任務是至關重要的。
在子執行緒中操作主線程
當android啟動activity時,會先啟動乙個主線程 也稱為ui執行緒 用於控制activity的當前view介面,在主線程控制的過程中,子執行緒是不能直接更新主線程資料的,但是android中提供了很多其他執行緒操作ui執行緒的方法 方法一 activity.runonuithread ru...
主線程 子執行緒死掉 主線程可以在子執行緒之前死掉
我相信主線程不能在子執行緒之前死亡。但是有什麼方法可以檢查嗎?我在下面寫了乙個簡單的程式。任何人都可以證明它實際上離開理論嗎?class childre extends thread public void run for int i 0 i 10 i system.out.println chil...
主線程和子執行緒
子執行緒通過 handlerthread的thread.getlooper 繫結,在主線程的handler的handlermessage中呼叫threadhandler.sendmessagedelay msg,1000 向子執行緒傳送訊息。在子執行緒中通過handler.sendmessagede...