最近在項目中遇到了一些性能問題,爲了防止圖片一張一張加載而影響體驗和爲了提升效率,須要不斷的提早加載數據和大量圖片,當時咱們在項目中使用worker來作性能優化,把計算量比較大和圖片的預加載放入worker中操做。node
經過使用Web Worker, 咱們能夠在瀏覽器後臺運行Javascript, 而不佔用瀏覽器自身線程。Web Worker能夠提升應用的整體性能,而且提高用戶體驗。若是你對worker還不熟悉,請參照,在此就不作過多的介紹了,本文主要是介紹worker的應用場景和性能問題。ajax
單獨啓動一個worker來加載圖片,每一次請求回來的數據中都經過postMessage給worker,很少說廢話了,直接貼代碼:跨域
let w = new Worker("js/workers.js");
w.onmessage = function (event) {
/*var img = document.createElement("img");
img.src = window.URL.createObjectURL(event.data);
document.querySelector('#result').appendChild(img)
*/
console.log(event.data);
};
w.onerror = function(e){
e.currentTarget.terminate();
console.log('erro: ' + e.message);
};複製代碼
let arr = [...好多圖片路徑];
for (let i = 0, len = arr.length; i < len; i++) {
let req = new XMLHttpRequest();
req.open('GET', arr[i], true);
req.responseType = "blob";
//req.setRequestHeader("client_type", "DESKTOP_WEB");
req.onreadystatechange = () => {
if (req.readyState == 4) {
// postMessage(req.response);
}
}
req.send(null);
}複製代碼
在使用worker的過程當中發現,若是worker實列引用爲0,該worker空閒後當即會被關閉;若是worker實列引用不爲0,該worker空閒也不會被關閉。瀏覽器