2013-07-23 1 views
4

Я могу закончить работу с большими объемами данных, представленными Blobs, в веб-приложении с длительным сроком действия. Некоторые из них были получены с использованием XHR (кэширование), другие были созданы с использованием new Blob(...).Где хранятся данные Blob?

  • Теперь, если я правильно прочитал, Blobs поддерживаются либо диском, либо памятью?
  • Как это принято? (И браузеры придерживаются тех же правил?)
  • Существуют ли способы принудительного или гарантированного определенного поведения?

Меня беспокоит, как управлять этими блобами. Моя первоначальная идея состояла в том, чтобы просто хранить ссылки. Но было бы плохо, если бы в течение всей жизни приложения хранились большие куски данных в памяти.

ответ

2

То, что я обнаружил, до сих пор, глядя на исходный код Firefox: (я до сих пор, чтобы получить все это проверено!)

объекты Blob являются экземплярами nsDOMFile подклассов. Реализация - мудрый, есть небольшое различие между Blob и файлом. Они либо nsDOMFileFile, nsDOMMemoryFile, nsDOMTemporaryFileBlob или nsDOMMultipartFile.

Практически единственные места nsDOMMemoryFile используется являются:

  • В HTMLCanvasElement#toBlob.
  • В API-интерфейсе камеры.
  • В API Media Recorder.
  • В WebSockets, когда binaryType - 'blob'.
  • В каналах данных WebRTC, когда binaryType является 'blob'.

Все другие места используют nsDOMFileFile или nsDOMTemporaryFileBlob, и, таким образом, поддерживается дисковой памяти, за исключением new Blob конструктора.

Blobs, созданные с использованием конструктора new Blob, являются экземплярами nsDOMMultipartFile. Этот класс фактически обертывает набор blob (из трех других описанных выше видов) и представляет их как один.

При передаче строки или массива ArrayBuffer они копируются в новый nsDOMMemoryFile, а затем присоединяются к набору. При передаче существующего Blob любого типа он добавляется к набору как есть. Таким образом, nsDOMMultipartFile может иметь смешанную память и память.