2016-10-10 19 views
1

イメージの課金方法を上書きして、このローディングをWebWorkerで行うことはできますか?Webworkerを使用してImage.prototypeをオーバーライドする

例:私は、単一の画面上に多くの画像を携帯する必要があるので、私は一度だけ、私は改善WebWorkerを使用して、おそらくイオン性フレームワークを使用して、それが今日はUIスレッドを戦っているスタンドロードし、それを必要とする

Image.prototype.contructor = function(arguments){ // Webworker implementation } 

//or 

Image.prototype.setSrc = function(arguments){ // Webworker implementation } 

var image = new Image('somePath.jpg'); //or 
image.setSrc('somePath.jpg'); 

パフォーマンス

答えて

1

要求が成功したときは、メインスレッドにWorkerXMLHttpRequest()ArrayBufferpostMessage()Blob、または画像のdata URI表現を使用することができます。

メインスレッドで

var worker = new Worker("/path/to/worker.js"); 

worker.addEventListener("message", function(e) { 
    // do stuff with `Blob` of image 
    console.log(e.data); 
    var img = new Image; 
    img.onload = function() { 
    document.body.appendChild(this) 
    } 
    img.src = URL.createObjectURL(e.data); 
}); 

worker.postMessage("request" /* or, path to image */); 

worker.js

self.addEventListener("message", function(e) { 
    if (e.data === "request") { 
    var request = new XMLHttpRequest(); 
    request.open("GET", "/path/to/image" /* or, `e.data` */); 
    request.responseType = "blob"; 
    request.onload = function() { 
     self.postMessage(request.response); 
    } 
    request.send(); 
    } 
}); 

plnkr http://plnkr.co/edit/smqVzIMSOJR3GNSBBxul?p=preview

+0

こんにちは、それはこのような行為の影響を示すグラフを持つことが可能でしょうか? –

+0

@SteevePitis _ "このプラクティスの影響を示すグラフを持つことは可能でしょうか?_はい。 firefox 45のリンクされたplnkrで、 'Ctrl + Shift + I 'を押して開発者ツールを切り替えることができます。 「パフォーマンス」を選択します。 'Waterfall'を選択します。 'Start Recording Performance'をクリックしてください。 plnkrエディタで 'Stop'をクリックしてから' Run'をクリックしてください。 plnkrパネルで画像がレンダリングされたら 'Stop Recording Performance'をクリックしてください。開発者ツールパネルでリストとグラフに表示される結果をフィルタリングします。 – guest271314

関連する問題