2016-10-10 3 views
1

이미지의 청구 방법을 덮어 쓸 수 있으므로이 로딩이 WebWorker에서 수행됩니까?webworker를 사용하여 Image.prototype 재정의

예 : I는 한 화면에 많은 이미지를 전달해야하기 때문에 내가 한 번만 나는 향상 시키 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

당신은 WorkerArrayBufferpostMessage(), Blob, 또는 주 스레드 이미지의 data URI 표현을 XMLHttpRequest()를 사용할 수 있습니다. 메인 쓰레드

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'을 선택하십시오; '녹화 시작'을 클릭하십시오. plnkr Editor에서 '정지'를 클릭 한 다음 '실행'을 클릭하십시오. 이미지가 plnkr 패널에서 렌더링 될 때'Stop Recording Performance'를 클릭하십시오; 필터 도구 모음에서 결과를 목록 및 그래프에 표시 할 수 있습니다. – guest271314