私はiOSアプリを作成しています。これにより、ユーザーはステータスの更新を記述でき、ユーザーはそれにコメントしたり、さまざまな方法で操作したりできます。基本的に、ステータスの更新には複数のプロパティが保存されます。これらのステータス更新が50を超えるホーム画面がテーブルビューに表示されているアプリを想像してみてください。
今度は目を離して、ビッグゲームの前にテクニックを習得しようとしている開発者である練習/デモアプリに焦点を合わせます(それは私です!)したがって、基本的に、私はシンガポールに拠点を置くS3バケットをセットアップすることから始めました。私はシンガポールに住んでいるので、近くにサーバーがあり、本当にすべてが高速でスムーズでなければなりません。ただし、そうではありません。その遅い、そしてそれは私をイライラさせ始めています。
コメントやいいねなどを含む高解像度のパノラマ画像を読み込むS3を使用するアプリを知っていますが、このすべてのデータが読み込まれるまでに1秒以上かかります。彼らが実際にプロセスをどのように実行するかはわかりません。彼らがS3に画像を保存していることは知っていますが、私が知っているのはそれだけです。スターターデモでは、テキストの一部(たとえば、20)をアップロードしてからダウンロードするだけで、60mbpsのwifiで15秒ほどかかります。これらのテキストはそれぞれ1文を超えることはなく、フレーズであるため、ここでは本当に混乱しています。
CloudFrontをセットアップしましたが、Webサイト用ではありませんか?ディストリビューションの管理と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
}
}
}
});
}
私のコードに何か問題があり、それが非常に遅れていますか?イメージングサービスがいいねやコメントなどを含むHQ画像をロードするのに1秒かかる場合、これには数ミリ秒かかると思います。1〜2秒かかります。
助けてくれてありがとう...
アップデート
さて、ここではキーの反復は問題ではないようですが、オブジェクトのダウンロードは問題ではありません。何かご意見は?ありがとう...