本篇內(nèi)容介紹了“javascript多線程的實(shí)現(xiàn)方法”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元武陵源做網(wǎng)站,已為上家服務(wù),為武陵源各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
在js中,可以使用Worker類來實(shí)現(xiàn)多線程,語法格式為“var worker = new Worker(js文件路徑);”。使用這個(gè)類的時(shí)候,它就會(huì)向?yàn)g覽器申請(qǐng)一個(gè)新的線程,該線程就用來單獨(dú)執(zhí)行一個(gè)js文件。
本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
我們都知道JS是一種單線程語言,即使是一些異步的事件也是在JS的主線程上運(yùn)行的(具體是怎么運(yùn)行的,可以看我另一篇博客JS代碼運(yùn)行機(jī)制)。像setTimeout、ajax的異步請(qǐng)求,或者是dom元素的一些事件,都是在JS主線程執(zhí)行的,這些操作并沒有在瀏覽器中開辟新的線程去執(zhí)行,而是當(dāng)這些異步操作被操作時(shí)或者是被觸發(fā)時(shí)才進(jìn)入事件隊(duì)列,然后在JS主線程中開始運(yùn)行。
首先說一下瀏覽器的線程,瀏覽器中主要的線程包括,UI渲染線程,JS主線程,GUI事件觸發(fā)線程,http請(qǐng)求線程。
JS作為腳本語言,它的主要用途是與用戶互動(dòng),以及操作DOM。這決定了它只能是單線程,否則會(huì)帶來很復(fù)雜的同步問題。(這里這些問題我們不做研究)
但是單線程的語言,有一個(gè)很致命的確定。如果說一個(gè)腳本語言在執(zhí)行時(shí),其中某一塊的功能在執(zhí)行時(shí)耗費(fèi)了大量的時(shí)間,那么就會(huì)造成阻塞。這樣的項(xiàng)目,用戶體驗(yàn)是非常差的,所以這種現(xiàn)象在項(xiàng)目的開發(fā)過程中是不允許存在的。
其實(shí)JS為我們提供了一個(gè)Worker的類,它的作用就是為了解決這種阻塞的現(xiàn)象。當(dāng)我們使用這個(gè)類的時(shí)候,它就會(huì)向?yàn)g覽器申請(qǐng)一個(gè)新的線程。這個(gè)線程就用來單獨(dú)執(zhí)行一個(gè)js文件。
var worker = new Worker(js文件路徑);
那么這個(gè)語句就會(huì)申請(qǐng)一個(gè)線程用來執(zhí)行這個(gè)js文件。
當(dāng)然,在主線程中有一些方法來實(shí)現(xiàn)對(duì)新線程的控制和數(shù)據(jù)的接收。在這里,我們只說比較常用的幾個(gè)方法。
//postMessage(msg); //postMessage方法把在新線程執(zhí)行的結(jié)果發(fā)送到瀏覽器的js引擎線程里 worker.onmessage = function(){ //獲取在新線程中執(zhí)行的js文件發(fā)送的數(shù)據(jù) 用event.data接收數(shù)據(jù) console.log( event.data ) }; setTimeout( function(){ worker.terminate(); //terminate方法用于關(guān)閉worker線程 },2000) setTimeout( function(){ worker = new Worker("js/test22.js"); //再次開啟worker線程 },3000)
在新線程中使用postMessage()方法可以向主線程中發(fā)送一些數(shù)據(jù),主線程中使用worker的onmessage事件來接收這些數(shù)據(jù),這樣就實(shí)現(xiàn)了js的多線程執(zhí)行和多線程之間數(shù)據(jù)的傳遞。
“javascript多線程的實(shí)現(xiàn)方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)頁標(biāo)題:javascript多線程的實(shí)現(xiàn)方法
當(dāng)前網(wǎng)址:http://aaarwkj.com/article40/godseo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、關(guān)鍵詞優(yōu)化、網(wǎng)站制作、ChatGPT、微信小程序、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)