什麼是 Web Workers?
個人部落格上線歡迎來訪 http://www.zihanzy.com
引入
H5規範提供了js分執行緒的實現,取名為Web Workers他是HTML5提供的一個JavaScript多執行緒解決方案,我們可以將一些大計算量的程式碼交由web Worker執行而不凍結使用者介面
但是子執行緒完全受主執行緒控制,且不得操作DOM,所以這個新標準並沒有改變JavaScript單執行緒的本質
相關API
1.Worker:建構函式,載入分執行緒執行的js檔案
2.Worker.prototype.onmessage:用於接受另一個執行緒的回撥函式
3.WorKer.prototype.postMessage:向另一個執行緒傳送訊息
**不足
**
worker內程式碼不能操作DOM
不能跨域載入JS
不是每個瀏覽器都支援這個新特性
var input = document.getElementById('number')
function computed(n){
return n<=2 ? 1:computed(n-1) + computed(n-2) //遞迴呼叫
}
document.getElementById('btn').onclick = function(){
var number = input.value
var result = computed(number)
alert(result)
}
上面程式碼當按鈕被點選時根據使用者輸入的值進行斐波拉契數列的計算
當這個值較大時,由於遞迴導致頁面要很長時間才能響應,在等待響應的過程中由於js的單執行緒機制導致我們不能進行任何操作,頁面就像被卡死了一樣,如果要解決這個問題,可以用 web Wokers實現
將計算的邏輯交給分執行緒執行,這樣在計算的過程中我們可以正常操作頁面
//index.html
var input = document.getElementById('number')
document.getElementById('btn').onclick = function(){
var number = input.value
//建立一個worker物件
var worker = new Worker('./js/worker.js')
console.log(worker)
//向分執行緒傳送訊息
worker.postMessage(number)
console.log('主執行緒向分執行緒傳送資料:'+number)
//繫結接受訊息的監聽
worker.onmessage = function(event){
console.log('主執行緒接受分執行緒返回的資料:'+event.data)
}
}
//worker.js
function computed(n){
return n<=2 ? 1:computed(n-1) + computed(n-2) //遞迴呼叫
}
var onmessage = function(event){
var number = event.data
console.log('分執行緒接受主執行緒傳送的資料:'+number)
//計算
var result = computed(number)
postMessage(result)
console.log('分執行緒向主執行緒返回資料:'+number)
}
個人部落格上線歡迎來訪 http://www.zihanzy.com
相關文章
- 什麼是Web workers?為什麼我們需要他Web
- 深入web workers (上)Web
- Cesium之Web WorkersWeb
- web前端是什麼?Web前端
- 什麼是Web serverWebServer
- 什麼是Web ServerWebServer
- Web service是什麼?Web
- web assembly是什麼,能幹什麼Web
- 為什麼要有 Servlet ,什麼是 Servlet 容器,什麼是 Web 容器?ServletWeb
- 開始使用Web WorkersWeb
- Web含義是什麼Web
- 什麼是Web Service (轉)Web
- 什麼是web組態Web
- Inline Workers--Web workers without a separate Javascript fileinlineWebJavaScript
- 什麼是Web前端?Web前端要學習什麼內容?Web前端
- 什麼是web service?- SOAP Web Service & Restful Web ServiceWebREST
- 精讀《談談 Web Workers》Web
- Web前端是什麼?主要是幹什麼的Web前端
- WEB伺服器是什麼Web伺服器
- javascript中web worker是什麼JavaScriptWeb
- Web前端是學什麼的?Web前端
- 什麼是WEB伺服器?Web伺服器
- 什麼是 Web Service--面試Web面試
- 什麼是WEB伺服器,什麼是應用伺服器Web伺服器
- web裡什麼是Math函式,作用是什麼Web函式
- 什麼是Web快取,為什麼要使用它Web快取
- web workers簡介(三)建立subworkerWeb
- HTML5 Web Workers簡介HTMLWeb
- 什麼是Web應用防火牆?Web防火牆
- 什麼是 StackBlitz 的 web containerWebAI
- 什麼是 Immutable Web AppsWebAPP
- 什麼是web伺服器控制Web伺服器
- 什麼是Web3的Mastodon?WebAST
- web前端的工作方向是什麼?Web前端
- Web3.0是什麼,為什麼MetaVerse這麼火?WebMetaverse
- Web前端是什麼?Web前端包括哪些技術?Web前端
- Web前端技術分享:什麼是塊元素?什麼是行內元素?Web前端
- 什麼是字串,web前端開發裡起到什麼作用字串Web前端