egret 支持worker

 window._use_worker = document.location.href.indexOf("useWorker=1") != -1;
    if (window._use_worker) {
      window.worker = new Worker("./worker_loader.js");
      window.loadMap = {};
      window.worker.onmessage = evt => {
        window.loadMap[evt.data.url](evt.data);
      }
      window._work_load = (url, fun) => {
        window.loadMap[url.url] = fun;
        window.worker.postMessage(url);
      }
    }
console.log("worker_loader init ok");
onmessage = evt => {
	loadImage2(evt.data.url);
}

function loadImage2(url) {
	console.log("worker load " + url);
	var failed = false;
	var xhr = new XMLHttpRequest;
	xhr.open("GET", url, true);
	xhr.responseType = "arraybuffer";
	xhr.onload = function () {
		var response = xhr.response || xhr.mozResponseArrayBuffer;
		if ((xhr.status != 200 && xhr.status != 0) || response.byteLength < 10) {
			if (!failed) {
				failed = true;
				pngFail(url, "loadFail from onload" + xhr.status);
			}
			return;
		}
		var data, png;
		data = new Uint8Array(response);
		doCreateImageBitmap(data, url);
	};
	xhr.onerror = function (e) {
		pngFail(url, "loadFail");
	}
	xhr.send(null);
}

function doCreateImageBitmap(response, url) {
	try {
		response = new self.Blob([response], { type: "image/png" });
		self.createImageBitmap(response).then(imageBitmap => {
			var data = {};
			data.url = url;
			data.imageBitmap = imageBitmap;
			postMessage(data, [data.imageBitmap]);
		}).catch(

		)
	} catch (e) {

	}
}
 WebImageLoader.prototype.loadImage = function (src) {
                var image = new Image();
                this.data = null;
                this.currentImage = image;
                if (this._hasCrossOriginSet) {
                    if (this._crossOrigin) {
                        image.crossOrigin = this._crossOrigin;
                    }
                }
                else {
                    if (WebImageLoader.crossOrigin) {
                        image.crossOrigin = WebImageLoader.crossOrigin;
                    }
                }
                /*else {
                    if (image.hasAttribute("crossOrigin")) {//兼容猎豹
                        image.removeAttribute("crossOrigin");
                    }
                }*/
 
                image.onload = this.onImageComplete.bind(this);
                image.onerror = this.onLoadError.bind(this);
                if (window._use_worker == false) {
                    image.src = src;
                } else {
                    window._work_load({ url: src }, e => { this.onImageComplete(e) });
                }
            };
  WebImageLoader.prototype.onImageComplete = function (event) {
                var image
                if (window._use_worker == false) {
                    image = this.getImage(event);
                } else {
                    image = event.imageBitmap;
                }
                if (!image) {
                    return;
                }
                this.data = new egret.BitmapData(image);
                var self = this;
                window.setTimeout(function () {
                    self.dispatchEventWith(egret.Event.COMPLETE);
                }, 0);
            };

版权声明:本文为qq_38913715原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。