gpt4 book ai didi

ios - 使用 AWSiOSSDK.framework 从 AWS S3 下载图像花费的时间太长

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:31:15 25 4
gpt4 key购买 nike

从 AWS S3 下载一个 700 KB 的图像文件大约需要 7.5 秒。

我写了这个方法来从 AWS S3 下载图像:

+ (UIImage *)downloadImageFromPath:(NSString *)path
{
NSDate *methodStart = [NSDate date];

S3GetObjectRequest *getObjectRequest = [[S3GetObjectRequest alloc] initWithKey:path withBucket:AWS_BUCKET];

AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY_ID withSecretKey:SECRET_KEY];

S3GetObjectResponse *response;
@try
{
response = [s3 getObject:getObjectRequest];
}
@catch(NSException* ex)
{
return [UIImage imageNamed:@"blank.jpg"];
}

NSData *data = response.body;
UIImage *image = [UIImage imageWithData:data];

NSDate *methodFinish = [NSDate date];
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart];
NSLog(@"executionTime = %f", executionTime);

return image;
}

我只是在方法的开头和结尾添加了代码。

正如我上面提到的,它需要大约 7.5 秒才能完成。

我在后台使用优先级 DISPATCH_QUEUE_PRIORITY_HIGH 的 GCD 运行它,运行时队列中没有其他任何东西。

有人知道为什么要花这么长时间吗?很乐意提供更多信息。

最佳答案

这是一个已知问题,在上传和下载图像时,S3 本身

好吧,当您启用 CloudFront 并使用其他 AWS 服务时,这实际上不是问题。

您正在寻找的是 Cloudfront CDN from Amazon .您可以指定一个来源(在您的情况下就是您的 S3 存储桶),然后您的文件将分发到全局所有 Amazon Cloudfront 边缘位置。查看他们的 FAQlist of edge locations .

您将上传到中央服务器,您的大多数用户都在那里(估计)。并从签名 URL 下载,该 URL 会将您定向到离用户最近的服务器,其中包含您的存储桶的副本...您还可以在服务器上缓存图像,以加快上传和下载速度。

此外,我不确定您如何确定 path( key ),但如果您列出 S3 存储桶中的 key ,请停止!它很慢!您应该使用 DynamoDB 或 SimpleDB,这两种方法都可以存储小型数据集,DynamoDB 速度超快但实际上没有查询选项,您可以将所有键以特定格式存储到 DynamoDB 中并匹配它们。

您可以使用 SimpleDB 并使用相关属性(属性)存储所有键,并使用类似于 SQL 的 SELECT 表达式查询 SimpleDB —— 但语法略有不同

您可以做很多事情来优化 S3!

如果您需要有关所有 的详细步骤,如果您悬赏这个问题,我会去做。从文档中提取这一点并不容易,但也可能需要我小时来编写,而且我还要上学!

完成所有这些步骤后,我将大约 8 秒缩短为几乎弹指一挥间!

关于ios - 使用 AWSiOSSDK.framework 从 AWS S3 下载图像花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com