URL Sorl-Thumbnail 中的序列化性能问题
URL Serialization Performance Issue in 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和#3时,脚本需要0.193s
- 第 2 步:当我注释掉 #1 和 #3 时,脚本需要 0.0153 秒
- 第 3 步:当我注释掉 #1 时,脚本需要 0.669 秒 (!)
奇怪的是,当我调试第3步时,x似乎已经有了属性“url”,所以我不知道为什么要花这么长时间才能访问它。
与 Redis 的连接正常,并且在第 2 步中已激活对其的查询。正如我之前所说,缩略图已经生成,查找缓存在 Redis 中,因此(我相信)它与 S3 缩略图生成问题无关。
在生产中,我经常一次查询大约 50 张图像……这相当于超过 4 秒的 url 序列化……将不胜感激! :)
好的,找出问题所在。我在设置中设置了 AWS_S3_CUSTOM_DOMAIN
,但不小心在我的存储中覆盖了它 class:
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 倍(字面意思)。
我在使用 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和#3时,脚本需要0.193s
- 第 2 步:当我注释掉 #1 和 #3 时,脚本需要 0.0153 秒
- 第 3 步:当我注释掉 #1 时,脚本需要 0.669 秒 (!)
奇怪的是,当我调试第3步时,x似乎已经有了属性“url”,所以我不知道为什么要花这么长时间才能访问它。
与 Redis 的连接正常,并且在第 2 步中已激活对其的查询。正如我之前所说,缩略图已经生成,查找缓存在 Redis 中,因此(我相信)它与 S3 缩略图生成问题无关。
在生产中,我经常一次查询大约 50 张图像……这相当于超过 4 秒的 url 序列化……将不胜感激! :)
好的,找出问题所在。我在设置中设置了 AWS_S3_CUSTOM_DOMAIN
,但不小心在我的存储中覆盖了它 class:
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 倍(字面意思)。