我正在开发新闻聚合器并使用 django-imagekit 创建新闻文章缩略图。
该应用程序托管在 Heroku 上。随着时间的推移,我注意到应用程序消耗了越来越多的内存。目前,数据库中有大约 8000 张图像,与数据库中有大约 100 张图像的暂存应用程序相比,该应用程序消耗的内存大约是 3 倍。
我相信问题与 django-imagekit 有关。如果我调用模板中的原始图像,而不是 django-imagekit 处理的图像,内存会下降到正常水平。
型号:
class Article(models.Model):
title = models.CharField(max_length=255)
…
photo = models.ForeignKey(Photo, blank=True, null=True, related_name='+', on_delete=models.SET_NULL)
…
class Photo(models.Model):
name = models.TextField()
…
photo = models.ImageField(upload_to='user/photos/%Y/%m/%d', max_length=255)
…
thumb = ImageSpecField(source='photo',
processors=[resize.ResizeToFit(131, 131),],
options={'quality': 90})
thumbnail_image = ImageSpecField(source='photo',
processors=[resize.ResizeToFill(100, 100),],
options={'quality': 90})
news_small = ImageSpecField(source='photo',
processors=[resize.ResizeToFill(125, 94),],
format='JPEG',
options={'quality': 90})
…
模板示例:
<a href="{{ item.get_absolute_url }}"><img src="{{ item.photo.news_small.url }}" alt=""></a>
设置.py
redis_url = urlparse(os.environ.get('REDIS_URL'))
CACHES = {
'default': {
'BACKEND': 'redis_cache.RedisCache',
'LOCATION': '%s:%s' % (redis_url.hostname, redis_url.port),
'OPTIONS': {
'DB': 0,
'PARSER_CLASS': 'redis.connection.HiredisParser',
'PASSWORD': redis_url.password
}
}
}
主页上显示了大约 25 个缩略图。但是内存也会在只显示一个图像的页面上跳转。
当前版本:Django==1.8.17 django-imagekit==4.0.2
django-imagekit 是否需要如此高的内存消耗,还是我实现错了?我会很感激任何建议。