загрузка фотографий в React native iOS слишком медленная
Мне нужно загрузить тысячи фотографий в React Native для автономного использования. Я использую RNFetchBlob для Android и RNFS для iOS для загрузки всех фотографий.
для android
RNFetchBlob.config({
path: `${Path.path}${fileName}.${type}`,
fileCache: true
}).fetch('GET', result, {})
.progress((received, total) => {
}).then(async res => {
deletePhoto(id)
console.log('downloaded', res)
}).catch((error) => {
downloadFile(fileName, result, type, id)
console.log('error in file download', id)
})
для iOS
RNFS.downloadFile({
fromUrl: result,
toFile:`${Path.path}${fileName}.${type}`,
background: true,
connectionTimeout: 1000 * 10,
readTimeout: 1000 * 10,
discretionary: true,
progressDivider: 1,
progress: (res) => {
// do progress
}
}).promise.then((result) => {
console.log('downloaded', result)
})
.catch(error => {
console.log('error in file download', error)
})
Проблема
Время, затраченное на загрузку 800 файлов, предназначено для Android - 2-3 минуты зависит от пропускной способности сети, а для iOS 20 минут. Я не знаю, что делаю не так.
Любая помощь будет мне полезна заранее спасибо
2 ответа
Попробуйте установить для изображения ленивую загрузку.
Некоторые пакеты подходят для этого.
Вы ничего не написали о размере Изображений. Но если вам нужно загрузить огромное количество изображений, которые содержат как минимум большой объем данных, я бы посоветовал "переосмыслить" стратегию обработки изображений в приложении.
Если вам определенно нужны все эти изображения в автономном режиме, пик загрузки этих изображений наступает только при первом запуске приложения. После этого вы проверяете и синхронизируете только наличие новых, измененных или удаленных изображений на сервере с момента последней загрузки.
- В этом случае я бы предложил загружать изображения как блоки. Это означает... выяснить, какие самые первые изображения ожидает увидеть пользователь, и загрузить их в первом процессе загрузки. Для всех остальных мест, где изображения должны появляться (но еще не загружены), вы выводите сообщение типа: "Подождите. Инициализация выполняется". Затем вы загружаете - по-прежнему по приоритету - другие файлы шаг за шагом.
- Другое решение может заключаться в том, чтобы иметь большие пальцы с действительно низким размером файла / качеством на сервере и сначала загружать их для всех мест, где должны появляться изображения... затем загружать изображения шаг за шагом в фоновом режиме.
- Если ваши изображения не сильно меняются, вы можете подумать о том, чтобы все же объединить некоторые из необходимых изображений в свой APK. Это увеличивает размер APK, но дает вам немного ускоренный запуск для первых изображений (используйте это только как обходной путь на случай плохих ситуаций. Я не рекомендовал это!)
В противном случае, если вы don't
Если вам нужны все изображения в автономном режиме, вы можете предварительно загрузить изображения, если войдете на экран (где изображения ожидаются).
По крайней мере, я бы посоветовал переосмыслить стратегию показа изображений в вашем приложении. Не действуйте как веб-страницы в 1998 году - загрузите все изображения в page-init!
Лучше загружать изображения по необходимости (ленивая загрузка). Для этого есть некоторые компоненты... и даже core-Component -Komponent может помочь вам в этом, если вы реализуете его правильно.
Надеюсь, это вам немного поможет.