我正在为我正在开发的一个应用程序使用 Flask,以及用于存储数据的 sqlalchemy 和 MySQL 数据库。Jinja2 用于模板。在开发过程中,一切都很好,但现在当使用更大的数据集时,一些包含大量数据的网页的渲染速度非常慢。例如,用户列表由以下代码处理:
def users():
q = Users.query.all()
out = []
for i in q:
try:
something_i_need = Table.query.filter_by(email=i.email).order_by(Table.date).first().id
except:
something_i_need = 0
out.append({
'id': i.id,
'last_name': i.last_name,
'first_name': i.first_name,
'middle_name': i.middle_name,
'phone': i.phone,
'team': i.team,
'status': i.status,
'needed': something_i_need,
'some_more_data': i.some_more_data
})
return render_template('users.html', list_of_users=out)
数据有点简化,因为列表中有更多字段。对这个位置的调用,一次查询大约 2000 个用户需要 10 多秒,然后页面的加载也需要 10-20 秒。该表由以下主题函数包装,来自此链接的第一个表,虽然禁用某些列上的排序功能有所帮助,但它仍然非常慢。
所以,我想知道,我怎样才能优化这个过程或模板的生成以使其更快?我在 Amazon EC2 实例上运行它,使用Python 2.7.3 and mod_wsgi, Flask 0.9, Flask-SQLAlchemy=0.16, Jinja2==2.7, MySQL-python=1.2.4, SQLAlchemy=0.8.1
. 一个“明显”的解决方案,进行分页并一次返回 100 条左右的记录确实有效,因为列表必须包含所有用于排序目的的用户(主要是日期),因此该解决方案将是最后的手段。
提前致谢!