【发布时间】:2014-09-01 08:58:57
【问题描述】:
我们刚刚将一个 Django 项目迁移到 Heroku,并将我们所有的媒体和静态文件放在 Amazon S3 上(使用 django-storages 和 s3-boto)。
尽管我听说过 Amazon S3 速度非常快,并且在性能缓慢的情况下很少出现结果,但我们的图像加载速度已经减慢到绝对爬行并且经常超时。超时代码的一个例子是我们的一个模型上的这个属性,它试图选择一个合适的图像,最终回退到返回None:
@property
def photo(self):
"""Transparently serve the best available image for templates"""
if self.model_shot.storage.exists(self.model_shot.name):
return self.model_shot
elif self.image.storage.exists(self.image.name):
return self.image
else:
return None
当我在一个导致问题的模型上进行测试时,我尝试了这个:
$ heroku run python manage.py shell
...
>>> design = Design.objects.get(pk=10210)
>>> design.photo
此命令导致 shell 在最终返回 ImageFieldFile 对象之前挂起几秒钟。对它的后续调用会立即返回,这让我相信结果被缓存了。
我的问题是,处理此问题的最佳方法是什么?我听说过很多关于在这种情况下使用 CloudFront 的信息,但这绝对不是因为高流量(我们的网站上应该基本上没有任何流量)。其他一些缓存框架?完全不同的东西?
大部分有问题的图片至少为 1000x1000 像素。
【问题讨论】:
标签: python django amazon-s3 django-storage