第1個是html文件,第二 個是js文件,實際火狐測試有效 ...
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>js處理1千萬條數據排序並且頁面不卡頓</title> </head> <body> <h1>我就是測試文字,看works會不會造成頁面卡頓</h1> <script> // 放在火狐瀏覽器測試 谷歌會預設跨域,必須是伺服器環境 let works = new Worker('works.js') // 1.新建works works.postMessage({max: 10000000}) // 2 給works發送參數 works.onmessage = function (event) { // 6. 接收works的數據並處理操作 console.log(event.data) works.terminate() // 7 關閉works主線程 } </script> </body> </html>
self.addEventListener('message', function (e) { shui(e.data.max) // 3. works接收參數並處理 不會影響主線程 不會造成主頁面卡頓 }, false) function shui(numMax) { let arr = [] // 偽造大量測試數據 function getRandom() { let random = Math.ceil(Math.random() * 10000) return random } for (let i = 0; i < numMax; i++) { arr.push(getRandom()) } arr.sort(function (a, b) { return a - b } // 排序 ) postMessage(arr) // 4. works處理完數據 發送回主頁面 self.close() // 5.記得要關閉哦 }
第1個是html文件,第二 個是js文件,實際火狐測試有效