2014-01-18 3 views
5

최신 브라우저에서는 큰 개체를 Blob으로 할당 한 다음 URL을 통해 액세스를 요청할 수 있습니다. 이 URL은 브라우저의 다른 곳에 저장된 이미지 (예 : 이미지 데이터)를 제공합니다.JavaScript Blob 객체는 언제 가비지 수집됩니까?

브라우저가이 URL이 더 이상 필요 없으며 해당 Blob 데이터를 가비지 수집 할 수 있는지 어떻게 알 수 있습니까?

+0

아래의 대답은 할당 된 개체를 메모리에서 제거하지만 디스크 공간을 확보하는 가비지 수집과 관련이 없습니다. 가비지 수집에 대한 자세한 내용을 보려면 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management – Maus

+1

@Maus, 조사해보십시오. 내 생각에 가비지 컬렉터는 더 이상 필요하지 않은 리소스를 정리할 책임이 있습니다. 또한 디스크는 여전히 메모리이며 RAM (가상 메모리)의 확장으로 종종 사용됩니다. 브라우저/OS는 BLOB가 프로세스의 작업 세트에 저장되는지 또는 디스크에 저장되는지 여부를 자유롭게 결정합니다. –

답변

6

브라우저는 결국이 리소스를 지우지 만 메모리/디스크에서 제거되기까지는 시간 (며칠)이 걸릴 수 있습니다.

명시 적으로 개체를 제거하려면 revokeObjectURL을 사용하면됩니다.

var blob = new Blob([/*JPEG data*/], {type: "image/jpeg"}), 
    url = (window.URL || window.webkitURL), 
    objectUrl = url.createObjectURL(blob); 

// use the object URL, eg: 
var img = new Image(); 

img.onload = function() 
{ 
    // release the object URL once the image has loaded 
    url.revokeObjectURL(objectURL); 
}; 

// trigger the image to load 
image.src = objectURL; 
관련 문제