webworker運行在獨立的線程中,不會阻塞主線程,這是瀏覽器的特性而不是js的。webworker內的代碼是獨立的,不能訪問外部變量,并且只能使用ajax、navigator、location、JSON、applicationCache這些全局變量。
```
//這個js內的代碼會在獨立的線程中運行
var w1 = new Worker("xxx.js"); //只能通過js文件的方式啟動一個worker
//內部與外部之間只能用message這個key
w1.addEventListener('message', function(evt) { evt.data... });
w1.postMessage('something else');
//js內部
addEventListener('message', function(evt) { evt.data... });
postMessage('a really cool reply');
w1.terminate(); //終止worker 相當于直接關閉瀏覽器
//js內部
//你還可以加載其他js文件并執行,加載的過程是同步的,worker會等加載完成后在繼續執行
importScripts('foo.js', 'bar.js');
```
webworker適用場景:
處理密集型數學計算、大數據集排序、數據處理(壓縮、音頻分析、音像處理)、高流量網絡通信。
#### 測試
Benchmark.js測試庫
- 你不知道的JS上
- 第一部分 第三章 函數作用域和塊作用域
- 第一部分 第四章 提升
- 第一部分 第五章 閉包
- 第二部分 第一章 關于this
- 第二部分 第二章 this全面解析
- 第二部分 第三章 對象
- 第二部分 第五章 原型
- 第二部分 第六章 行為委托
- 你不知道的JS中
- 第一部分 第二章 值
- 第一部分 第三章 原生函數
- 第一部分 第四章 強制類型轉換
- 第一部分 第五章 語法
- 第二部分 第一章 異步
- 第二部分 第三章 Promise
- 第二部分 第四章 生成器
- 第二部分 第五章 性能
- 你不知道的JS下
- 第一部分 總結
- 第二部分 第二章 語法
- 第二部分 第三章 代碼組織
- 第二部分 第四章 Promise
- 第二部分 第五章 集合
- 第二部分 第六章 新增API
- 第二部分 第七章 元編程
- 第二部分 第八章 ES6之后