From 5fbff2420421e82498d71dddc1034fd6e9eba8e7 Mon Sep 17 00:00:00 2001 From: Cédric Bonhomme Date: Mon, 22 Sep 2014 23:18:43 +0200 Subject: Significative performance improvement for the /unread view. --- pyaggr3g470r/templates/unread.html | 8 ++++---- pyaggr3g470r/views.py | 11 +++++------ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pyaggr3g470r/templates/unread.html b/pyaggr3g470r/templates/unread.html index cdfb0dfe..9808572b 100644 --- a/pyaggr3g470r/templates/unread.html +++ b/pyaggr3g470r/templates/unread.html @@ -18,10 +18,10 @@ -

{{ feed.articles.all()|length }} {{ _('unread articles') }}.

+

{{ feed.articles|length }} {{ _('unread articles') }}.

- {% for number in range(0, feed.articles.all()|length-(feed.articles.all()|length % 3), 3) %} + {% for number in range(0, feed.articles|length-(feed.articles|length % 3), 3) %}
{% for n in range(number, number+3) %}
@@ -33,9 +33,9 @@ {% endfor %}
{% endfor %} - {% if feed.articles.all()|length % 3 != 0 %} + {% if feed.articles|length % 3 != 0 %}
- {% for n in range(feed.articles.all()|length-(feed.articles.all()|length % 3), feed.articles.all()|length) %} + {% for n in range(feed.articles|length-(feed.articles|length % 3), feed.articles|length) %}
{% if feed.articles[n].readed %}

{% else %}

{% endif %} {{ feed.articles[n].title|safe }} diff --git a/pyaggr3g470r/views.py b/pyaggr3g470r/views.py index ef3b908e..0212e496 100644 --- a/pyaggr3g470r/views.py +++ b/pyaggr3g470r/views.py @@ -28,6 +28,7 @@ __license__ = "AGPLv3" import os import datetime +from collections import namedtuple from flask import abort, render_template, request, flash, session, \ url_for, redirect, g, current_app, make_response, jsonify from flask.ext.login import LoginManager, login_user, logout_user, \ @@ -451,13 +452,11 @@ def unread(feed_id=None): else: feeds_with_unread = Feed.query.filter(Feed.user_id == g.user.id, Feed.articles.any(readed=False)) result, nb_unread = [], 0 + light_feed = namedtuple('Feed', ['id', 'title', 'articles'], verbose=False, rename=False) for feed in feeds_with_unread: - new_feed = feed - new_feed.articles = Article.query.filter(Article.user_id == g.user.id, Article.feed_id == feed.id, Article.readed == False).all() - length = len(new_feed.articles.all()) - if length != 0: - result.append(new_feed) - nb_unread += length + articles = Article.query.filter(Article.user_id == g.user.id, Article.feed_id == feed.id, Article.readed == False).all() + result.append(light_feed(feed.id, feed.title, articles)) + nb_unread += len(articles) return render_template('unread.html', feeds=result, nb_unread=nb_unread) @app.route('/inactives', methods=['GET']) -- cgit