<!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文件,實際火狐測試有效
