Ответ 1
Есть разница.
1) время
-
createObjectURL
выполняется синхронно (немедленно) -
FileReader.readAsDataURL
выполняется асинхронно (через некоторое время)
2) использование памяти
-
createObjectURL
возвращает url с хешем и сохраняет объект в памяти до тех пор, пока документ не выгрузит событие (например, закрыть документ) или не выполнитrevokeObjectURL
-
FileReader.readAsDataURL
возвращаетbase64
, который содержит много символов, и использует больше памяти, чем blob-url, но удаляет из памяти, когда вы ее не используете (сборщиком мусора)
3) поддержка
-
createObjectURL
из IE 10 и всех современных браузеров -
FileReader.readAsDataURL
из IE 10 и всех современных браузеровОт меня лучше использовать blob-url (через
createObjectURL
), он эффективнее и быстрее, но если вы используете много URL-адресов объектов, вам нужно отпустите эти URL-адресаrevokeObjectURL
(чтобы освободить память). Например, вы можете вызвать URL.revokeObjectURL внутри обработчика загрузки изображения, а объект Image сохранит данные изображения, не теряя его, Nahuel Greco (c).