我正在创建一个 iOS 应用程序,它允许用户编写状态更新,人们可以对其发表评论,喜欢它,以多种方式与之交互,基本上状态更新具有多个将与它一起存储的属性。想象一个应用程序的主屏幕,其中超过 50 个状态更新表示为表格视图。
现在把你的眼睛移开,专注于一个练习/演示应用程序,一个试图在大型比赛之前掌握技术的开发人员(就是我!)所以基本上,我已经开始在新加坡建立一个 S3 存储桶。我住在新加坡,所以附近有一个服务器,真的一切都应该快速顺利。除了,它只是没有。它很慢,它开始让我生气。
我知道一个使用 S3 的应用程序可以加载带有评论、喜欢等的高清全景图像,并且加载所有这些数据需要一秒钟或更长时间。我不确定他们实际上是如何执行该过程的,我知道他们将图像存储在 S3 上,但我只知道这些。在我的入门演示中,我只需上传一些文本(比如 20 条)然后下载它们,在我的 60 mbps wifi 下大约需要 15 秒!这些文本甚至不超过一个句子,它们是短语,所以我在这里真的有点困惑。
我有 CloudFront 设置,但不是用于网站吗?我已经设置了管理分发和 URL,但是如何在我的代码中设置?这可能是我要确定稍后在我的其他应用程序中发布的最大问题。即便如此,我住在新加坡并且存储桶在新加坡服务器中,因此用于自测/练习的 CloudFront 不是强制性的。
我觉得这非常令人困惑,这是我生成的一些带注释的代码,是否有任何问题,导致它变慢的误解?
- (void)loadObjects {
S3ListObjectsRequest *listObjectRequest = [[S3ListObjectsRequest alloc] initWithName: @"testbucketquotes.rohanprostudios"];
S3ListObjectsResponse *listObjectResponse = [[AmazonClientManager s3] listObjects:listObjectRequest];
if(listObjectResponse.error != nil)
{
}
else
{
S3ListObjectsResult *listObjectsResults = listObjectResponse.listObjectsResult;
if (objects == nil) {
objects = [[NSMutableArray alloc] initWithCapacity:[listObjectsResults.objectSummaries count]];
}
else {
[objects removeAllObjects];
}
// By defrault, listObjects will only return 1000 keys
// This code will fetch all objects in bucket.
NSString *lastKey = @"";
for (S3ObjectSummary *objectSummary in listObjectsResults.objectSummaries) {
if ([[objectSummary key] rangeOfString: @"UploadedQuote"].location != NSNotFound) {
[objects addObject:[objectSummary key]];
lastKey = [objectSummary key];
}
}
while (listObjectsResults.isTruncated) {
listObjectRequest = [[S3ListObjectsRequest alloc] initWithName: @"testbucketquotes.rohanprostudios"];
listObjectRequest.marker = lastKey;
listObjectResponse = [[AmazonClientManager s3] listObjects:listObjectRequest];
if(listObjectResponse.error != nil)
{
break;
}
listObjectsResults = listObjectResponse.listObjectsResult;
for (S3ObjectSummary *objectSummary in listObjectsResults.objectSummaries) {
if ([[objectSummary key] rangeOfString: @"UploadedQuote"].location != NSNotFound) {
[objects addObject:[objectSummary key]];
}
lastKey = [objectSummary key];
}
}
if (objects.count) {
for (int i = 0; i <= objects.count - 1; i++) {
S3GetObjectRequest *req = [[S3GetObjectRequest alloc] initWithKey:[objects objectAtIndex: i] withBucket: @"testbucketquotes.rohanprostudios"];
`// asynchronously loads text (adds to operation queue)`
AsyncQuoteDownloader *quote = [[AsyncQuoteDownloader alloc] initWithRequest:req andViewController: self];
[operationQueue addOperation: quote];
// in 'AsyncQuoteDownloader' when finished calls a method in this view controller adding the response to an array and reloading a table
}
}
}
});
}
我的代码有什么问题导致它如此滞后吗?如果图像服务需要 1 秒来加载带有喜欢和评论等的 HQ 图像需要 1-2 秒,我会认为这将需要几毫秒。
感谢您的任何帮助...
更新
好的,所以密钥的迭代似乎不是这里的问题,而是对象的下载。有什么想法吗?谢谢...