загрузка фото в реагирует на родную iOS слишком медленно - PullRequest
0 голосов
/ 06 марта 2020

Мне нужно загрузить тысячи фотографий в режиме реального времени для автономного использования. Я использую 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 ]

0 голосов
/ 06 марта 2020

Попробуйте установить отложенную загрузку для изображения.

Некоторые пакеты подходят для этого.

https://www.npmjs.com/package/react-native-image-progress

0 голосов
/ 06 марта 2020

Вы ничего не написали о размере изображений. Но если вам нужно загрузить огромное количество изображений, которые содержат как минимум большой объем данных, я бы предложил «переосмыслить» стратегию обработки ваших изображений в вашем приложении.

Если вам определенно нужны все эти изображения в автономном режиме , пик загрузки этих изображений - только при первом запуске приложения. После этого вы проверяете и синхронизируете c только на наличие новых, измененных или удаленных изображений на сервере с момента последней загрузки.

  1. В этом случае я бы предложил загрузить изображения в виде блоков. Это значит ... выяснить, какие самые первые изображения, которые пользователь ожидает увидеть, и загрузить их в первом процессе загрузки. Для всех других мест, где должны появиться изображения (но еще не загружены), вы выводите сообщение вроде: «Пожалуйста, подождите. Идет инициализация». Затем вы загружаете - по-прежнему по приоритету - другие файлы шаг за шагом.
  2. Другое решение может состоять в том, чтобы иметь большие пальцы с действительно низким размером / качеством файлов на сервере и сначала загружать их для всех мест, где должны появляться изображения. ... потом загружайте изображения в фоновом режиме шаг за шагом.
  3. Если ваши изображения не сильно меняются, вы можете подумать о том, чтобы добавить некоторые необходимые изображения в ваш APK. Это увеличивает размер APK, но дает вам немного ускоренный запуск для первых изображений (используйте это только как обходной путь для худшего случая. Я не рекомендовал это!)

В противном случае , если вам don't нужны все изображения в автономном режиме , вы можете предварительно загрузить изображения, если войдете в экран (где ожидаемые изображения).

По крайней мере, я бы предложил переосмыслить стратегию отображения изображений в ваше приложение. Не ведите себя так, как на веб-страницах 1998 года, - и загружайте все изображения на странице инициализации!

Вам лучше загружать изображения по мере необходимости (отложенная загрузка). Для этого есть некоторые компоненты ... и даже компонент core-Component -Komponent может помочь вам в этом, если вы правильно его реализуете.

Надеюсь, это вам немного поможет.

...