Swift : Получение более 1500 изображений с firebase . Пожалуйста, предложите мне профессиональный подход

# #swift #firebase #firebase-realtime-database #collections #uicollectionviewcell

Вопрос:

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

Что я сделал

Я использую Firebase DB для извлечения категорий внутри вложенного CollectionView, затем, используя эти категории, я пытаюсь получить изображение для этих категорий.У меня есть 50 категорий и 40 изображений во всех этих категориях , в настоящее время я пытаюсь получить изображения всех категорий, используя для каждого цикла по категориям и используя firebase observeSingleValue, чтобы получить эти изображения категорий и сохранить их в локальном массиве, но по мере загрузки данных загрузка процессора увеличивается до 100% при запуске, а объем памяти продолжает увеличиваться по мере запуска большего количества observeSingleValue.

  1. удаление наблюдателей даже при использовании Firebase observeSingleValue
  2. не сохраняя URL-адрес изображения в локальном массиве или не перезагружая данные CollectionView,использование памяти и процессора остается прежним
  3. попробовал использовать DispatchGroup()
  4. загрузка изображений 5-10 категорий сначала только, а затем загрузка большего количества по мере прокрутки пользователя вниз, но в этом методе, когда пользователь переходит к последней категории . память и процессор снова превышают 100% и 1 ГБ, и приложение выходит из строя из-за нехватки памяти

из того, что я диагностировал , проблема, похоже, заключается в использовании более 50 наблюдателей, но удаление наблюдателей не помогло
, я новичок в IOS, пожалуйста, направьте меня, если я делаю что-то не так, или скажите мне, как лучше всего получить данные о нескольких категориях

Редактировать : Найден виновник, после отключения firebase setPersistenceEnabled(true) приложение работает нормально, и все категории и их изображения загружаются нормально без использования большого количества ресурсов. но я хочу сохранить setPersistenceEnabled(true) для автономного использования , как мне это сделать?

код для получения изображений категорий :

 '''
//Firebase persistanceEnabled
Database.database().isPersistenceEnabled = true

      // for getting categories images
      for category in self.simpleCategories{
        var handle : UInt = category.id as! UInt
        let  templatesReference  = self.ref.child("templates").queryOrdered(byChild: 
       "CategoryId").queryEqual(toValue: category.id)
        //templatesReference.keepSynced( true )
        handle = templatesReference.observe( .value, with: { [self] (snapshot) in
  
            //Going To Get Children values
            for node in snapshot.children.allObjects as! [DataSnapshot] {
             let templatgeData = node.value as? NSDictionary
             let templateImage = templatgeData?["ImageUrl"] as? String ?? ""
             templateArray.append(template)
      }          
     //closing observer here
     templatesReference.removeObserver(withHandle: handle)
    }
 

if i remove this line

     Database.database().isPersistenceEnabled = true
 

приложение работает нормально и использует только 100-200 Мб памяти