2013-07-23 3 views
4

장기 실행 웹 응용 프로그램에서 Blob로 표시되는 많은 양의 데이터를 처리하게 될 수 있습니다. 그들 중 일부는 XHR (캐시 친숙)을 사용하여 얻었으며, 다른 일부는 new Blob(...)을 사용하여 생성했습니다.Blob 데이터는 어디에 있습니까?

  • 올바르게 읽었 으면 블롭은 디스크 또는 메모리로 백업됩니다.
  • 어떻게 결정됩니까? 브라우저는 동일한 규칙을 따릅니 까?
  • 특정 동작을 강제하거나 보장 할 수있는 방법이 있습니까?

내 관심사는 주로 이러한 얼룩을 관리하는 방법입니다. 나의 초기 아이디어는 단지 주위에 참고 문헌을 유지하는 것이었다. 그러나 응용 프로그램의 전체 수명 동안 많은 양의 데이터를 메모리에 보관하면 안 좋을 것입니다. 나는 파이어 폭스의 소스 코드를보고 지금까지 발견 한 무엇

답변

2

: (나는 아직 검증이 중 하나를 얻을 수!)

의 Blob 객체가 nsDOMFile 서브 클래스의 인스턴스입니다. 구현 방식에서는 Blob과 File 사이에 약간의 차이점이 있습니다. 그들은 nsDOMFileFile, nsDOMMemoryFile, nsDOMTemporaryFileBlob 또는 nsDOMMultipartFile입니다. 거의 유일한 장소 nsDOMMemoryFile 사용

은 다음과 같습니다 HTMLCanvasElement#toBlob에서

  • 합니다.
  • 카메라 API에서.
  • 미디어 레코더 API.
  • 웹 소켓에 binaryType'blob' 인 경우.
  • binaryType'blob' 일 때 WebRTC 데이터 채널에서.

다른 모든 장소 nsDOMFileFile 또는 nsDOMTemporaryFileBlob 사용하고, 따라서 new Blob 생성자를 제외하고, 디스크 스토리지로 백업됩니다.

new Blob 생성자를 사용하여 생성 된 블롭은 nsDOMMultipartFile의 인스턴스입니다. 이 클래스는 실제로 (위에 설명 된 다른 세 가지 유형의) 얼룩 ​​집합을 래핑하고이를 하나로 나타냅니다.

문자열 또는 ArrayBuffer를 전달할 때이 문자열은 새 nsDOMMemoryFile에 복사 된 다음 세트에 추가됩니다. 어떤 종류의 기존 Blob을 전달할 때 그대로 Blob에 추가됩니다. 따라서 nsDOMMultipartFile에는 실제 디스크와 메모리 저장 장치가 섞여있을 수 있습니다.