2

我正在开发新闻聚合器并使用 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 是否需要如此高的内存消耗,还是我实现错了?我会很感激任何建议。

4

0 回答 0