sorl-thumbnail - 慢模板渲染

时间:2014-09-01 09:12:42

标签: django performance django-templates sorl-thumbnail

我的模板遇到严重问题。经过一些测试,我发现渲染中最慢的部分是缩略图,由sorl-thumbnail生成。 以下是我的模板中发布的部分:

{% for listing in listings %}
    <li class="pic_view">
        <ul>
            <li class="picture">
                <a href="{% url 'listing' listing.id listing.title %}">
                    {% thumbnail listing.get_picture "240x143" crop="center" as im %}
                        <img src="{{ im.url }}">
                    {% empty %}
                        tc
                    {% endthumbnail %}
                    <div class="overlay"></div>
                </a>
            </li>
            <li class="artist">
                <a href="{% url 'profile_artist' listing.artist_id listing.artist.user.first_name %}">
                    {% thumbnail listing.artist.get_avatar "60x60" crop="center" as im %}
                        <img src="{{ im.url }}">
                    {% empty %}
                        tc
                    {% endthumbnail %}
                </a>
            </li>
        </ul>
    </li>
{% endfor %}

目前我有大约6个列表,以下是用于渲染的测量时间:

- 8512 ms on first rendering
- 4680 ms on reload
-  112 ms when thumbnail tags are removed

请你就这一点给我一些建议。上面的数字用Debug=True来衡量,但是当标志为False时没有区别。另外,根据Django文档,我包含了以下TEMPLATE_LOADERS

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    ('django.template.loaders.cached.Loader', (
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    )),
  )

2 个答案:

答案 0 :(得分:0)

Sorl在幕后执行此操作(文档中的章节为here,此处为TL; DR版本)

  1. 计算原始文件名和选项的哈希值 给予
  2. 检查数据库中是否已存在该哈希,如果已存在, 提供相关的缩略图
  3. 如果没有,请调整图像大小,将其存储在媒体位置,然后创建一个 具有散列/文件名关联的数据库记录,传递 缩略图
  4. 话虽如此,对于几次数据库查找来说,4.5秒的时间太长了。还有其他事情发生在这里。

答案 1 :(得分:0)

Sorl Thumbnail动态生成缩略图,因此操作耗时,您需要的是使用首选大小的cronjob或芹菜(首选)创建缩略图。已经有一个名为sorl-thumbnail-async的包可以满足您的需求并使用芹菜。因此,如果缩略图不可用,则只要缩略图可用就会显示虚拟图像,它们将被渲染。另外使用memcached作为django的缓存后端,这在性能方面确实很好。