新聞中心
本篇文章為大家展示了如何在three.js中使用多線程,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
1. 在three.js中使用多線程
在three.js中使用Web Worker經(jīng)常發(fā)生在大量計算造成CUP阻塞的情況下,我們舉一個例子,比如說我們制作了1000個Mesh,
讓他們簡單的動起來,CPU幾乎沒有什么壓力,F(xiàn)PS會在60左右,但是如果讓這1000個Mesh的位置都需要大量計算才能得到,那么FPS就會很低(和計算量成負(fù)相關(guān)),下面是一段代碼
for(let i=0; i500) { positions[i].y = positions[i].y - 1000; } } for(var i=0; i positions是儲存1000個Mesh位置信息的數(shù)組,group里面儲存了所有的Mesh,每次渲染都更改positions的位置信息,然后給Group的每一個Mesh設(shè)置新值,這種情況下FPS會低至7FPS,轉(zhuǎn)動場景可以很明顯的感覺到卡頓。接下來我們使用Web Worker處理這個問題,主線程代碼如下
myWorker = new Worker('/static/js/worker.js'); myWorker.postMessage(positions); myWorker.onmessage = e => { let positions = e.data; for(var i=0; i腳本代碼如下
onmessage = function(e) { let num = 1000; let positions = e.data; setInterval(e => { for(let i=0; i500) { positions[i].y = positions[i].y - 1000; } } postMessage(positions); }, 1000 / 60) }; 主要代碼和未使用Web Worker幾乎一樣,只不過是將處理位置的代碼放在新的線程中完成,setInterval定時器每一次完成位置計算都會通過postMessage(positions)將位置信息返回給主線程,主線程通過onmessage接受信息,返回對象的data屬性就是新的positions。這樣一來FPS可以達到60左右,轉(zhuǎn)動場景感覺的到卡頓。這是十分讓人欣喜的。
2. 性能分析
前面已經(jīng)說了在每一次位置計算中做10萬次累加,未使用Web Worker的情況下FPS降到了7,下面是更多的數(shù)據(jù)(數(shù)據(jù)僅做對比,和當(dāng)前使用情況以及配合有關(guān))。
累加次數(shù)(萬次) 使用Web Worker 未使用Web Worker 1 60 60 3 60 39 5 60 26 7 60 11 9 60 8 11 60 6 這里面可以看出,不管是多么大量的計算,使用Web Worker都不會影響主線程,但是對于未使用Web Worker影響是十分嚴(yán)重的,下面展示一下兩種情況下電腦性能的對比
(未使用Web Worker)
(使用Web Worker)
上述內(nèi)容就是如何在three.js中使用多線程,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當(dāng)前文章:如何在three.js中使用多線程-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://www.dlmjj.cn/article/dippig.html