我的模板遇到严重问题。经过一些测试,我发现渲染中最慢的部分是缩略图,由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',
)),
)
答案 0 :(得分:0)
Sorl在幕后执行此操作(文档中的章节为here,此处为TL; DR版本)
话虽如此,对于几次数据库查找来说,4.5秒的时间太长了。还有其他事情发生在这里。
答案 1 :(得分:0)
Sorl Thumbnail动态生成缩略图,因此操作耗时,您需要的是使用首选大小的cronjob或芹菜(首选)创建缩略图。已经有一个名为sorl-thumbnail-async的包可以满足您的需求并使用芹菜。因此,如果缩略图不可用,则只要缩略图可用就会显示虚拟图像,它们将被渲染。另外使用memcached作为django的缓存后端,这在性能方面确实很好。