загрузка фотографий в 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 ответа

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам