代码之家  ›  专栏  ›  技术社区  ›  kAiN

从Firebase读取数据太慢-iOS

  •  2
  • kAiN  · 技术社区  · 7 年前

    我正在与Firebase合作管理我的应用程序数据。

    到目前为止,Firebase似乎非常适合管理数据,但当我需要从数据库中读取数据时,我遇到了一个问题。。

    要从Firebase数据库中读取数据,请执行以下功能

    [[[[FIRDatabase database] reference] child:@"Region"] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
    
            [_regionList addObject:snapshot.value[@"name"]];
            [self.collectionView reloadData];
    }];
    

    数据收集方式正确,但问题是似乎有点慢。。。

    为了让你更好地理解。。。

    我必须在 UICollectionView .. 问题是,在查看 UICollectionView 收集的数据。。。你可以从我在下面发布的视频中看到一个例子。。

    VIDEO

    你能告诉我哪里错了吗?我似乎已经做了所有正确的事情,但我不理解读取数据的延迟

    这是我的密码

    - (void)viewDidLoad {
        [super viewDidLoad];
        _regionList = [[NSMutableArray alloc] init];
        _reference = [[DatabaseReference alloc] init];
        [self fetchRegion];
    }
    
    -(void)fetchRegion {
        [[[[FIRDatabase database] reference] child:@"Region"] observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
    
            [_regionList addObject:snapshot.value[@"name"]];
            [self.collectionView reloadData];
    
        }];
    }
    
    - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
        return self.regionList.count;
    }
    
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    
        ChooseRegionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
    
        cell.regionName.text = self.regionList[indexPath.item];
    
        return cell;
    }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Frank van Puffelen    7 年前

    数据从Firebase服务器异步加载。虽然这很好,因为这意味着您总是在查看最新的数据,但也意味着可能需要一些时间才能获得数据。

    缩短延迟(似乎)的典型方法:

    1. 加载更少的数据。

      加载数据所需的时间取决于3个因素:您对Firebase服务器的延迟、加载的数据量以及加载的连接带宽。由于您无法控制用户的连接速度或延迟,因此唯一可以控制的因素是加载的数据量。加载更少的数据将缩短延迟。

    2. 更快地开始加载数据

      在新视图的动画开始之前,您可能已经开始加载新视图的数据。这样就可以加载数据 在期间 视图的动画和新视图中的延迟将更短。

    3. 显示“请稍候”动画

      另一种解决方案是在新视图中向用户显示“请稍候”动画或横幅。这可以是视图静态元素的一部分,然后在实际数据可用时将其替换为实际数据。

    当然还有更多的技巧,但它们会越来越多地参与其中。如果您感兴趣:

    • 启用磁盘周长

      这其实很简单 set a flag . 从那时起,Firebase客户端将首先从本地磁盘缓存加载数据,然后将其与服务器的更新同步。但是,这种方法的影响可能比您初始化时所意识到的要大得多,所以我建议您仅在上述步骤不能给出令人满意的结果时才这样做。

    • 保留本地快照

      一种简单的方法是在应用程序的本地缓存中保留最后一个视图内容的屏幕截图,然后在新视图出现时立即显示。当用户扫描此日历时,数据将从服务器加载并更新。如果渲染数据需要花费大量时间,这通常是一种很好的方法。