URL序列化性能问题在Sorl-Thumbnail



我在使用sorl-thumbnail时遇到了一些困难。我用S3Boto3Storage存储后端在S3上托管图像,我使用Redis作为我的键值存储,所有查询都已经缓存在里面了。我使用以下依赖项:

boto3==1.17.103
botocore==1.20.105
Django==3.2.4
django-redis==4.10.0
django-storages==1.11.1
redis==3.3.11
sorl-thumbnail==12.7.0

现在我输入&执行以下脚本:

from sorl.thumbnail import get_thumbnail
images = Image.objects.all()  # 7 images
for image in images:
x = image.file
y = x.url                                           # 1
x = get_thumbnail(x, '800x600', crop='center')      # 2
x = x.url                                           # 3
  1. 第一步:当我注释掉#2 ,脚本需要0.193秒
  2. 步骤2:当我注释掉#1 ,脚本需要0.0153秒
  3. 步骤3:当我注释掉#1时,脚本需要0.669秒(!)

奇怪的是,当我调试第三步时,x似乎已经有属性"url",所以我不知道为什么要花这么长时间才能访问它。

与Redis的连接正在工作,并且在第二步中已经激活了对它的查询。就像我之前说的,缩略图已经生成,查找是缓存在Redis,所以它是(我相信)无关的S3缩略图生成问题。

在生产中,我经常查询大约50个图像一次…这相当于超过45个url序列化。非常感谢任何帮助!:)

好了,找到问题所在了。我在settings中设置了AWS_S3_CUSTOM_DOMAIN,但是意外地在我的存储类中覆盖了它:

from storages.backends.s3boto3 import S3Boto3Storage

class DefaultFileStorage(S3Boto3Storage):
location = settings.AWS_DEFAULT_FILES
file_overwrite = False
custom_domain = False  # <-- Bottleneck! 

去除custom_domain = False后,性能提高了10倍(字面上)。

最新更新