通过解析数据部分来减少加载时间

Posted

技术标签:

【中文标题】通过解析数据部分来减少加载时间【英文标题】:reduce loading times by parsing sections of data 【发布时间】:2012-11-17 04:26:31 【问题描述】:

我正在开发我的第一个应用程序,它正在解析来自网站的数据。根据用户的搜索,它可能必须解析 1000 个节点,这可能需要 30 秒才能将数据显示在 tableview 中。在用户部分滚动表视图之前,解析前 30 个节点而不显示下 30 个节点的一般策略是什么。我以这个网站 (here) 为例,但我很难理解在哪里放置我的解析方法以使其一次加载 30 个节点。

   #import "DataLoader.h"

@implementation DataLoader

@synthesize delegate;

- (void)loadData

[self performSelector:@selector(loadDataDelayed) withObject:nil afterDelay:3];


- (void)loadDataDelayed


[parsing method here]
NSMutableArray *array = [NSMutableArray arrayWithCapacity:30];
for (int i = 1; i<=30 ; i++) 
    [array addObject:[propertyList objectAtIndex:i];

[delegate.searchResultOfSets addObjectsFromArray:array];
[delegate.tableView reloadData];
// Always remember to set loading to NO whenever you finish loading the data.
delegate.loading = NO;

@end

但这显然首先解析所有数据。关于如何优化我的解析的任何想法?

【问题讨论】:

【参考方案1】:

先只获取30个项目,然后,当用户向下滚动到底部时,再次下载另外30个项目,可能如下。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath  
        if(indexPath.row == [self.arrayOfItems count] && hasMoreItemsToLoad) 
           [self loadNext30Items];

【讨论】:

谢谢,抱歉我太天真了。我是编程新手,我不确定如何分段解析。如何在 30 个项目后停止解析,然后在解析停止的地方继续解析?

以上是关于通过解析数据部分来减少加载时间的主要内容,如果未能解决你的问题,请参考以下文章

如何通过仅在用户滚动到特定部分时调用它来减少谷歌地图 API 命中数

DRF部分源码简介及序列化组件

前端怎么判断后台返回的0或1来渲染不同的页面

DNS 预解析

解析本地数据存储 + 网络同步

通过 PATCH 进行部分更新:如何解析 JSON 数据以进行 SQL 更新?