我是 AngularJS 的新手。我开发了一个列表,可以在搜索框中输入内容时进行过滤。过滤器从数据库对象中获取许多字段并搜索所有这些字段(例如:名称、id、评论...等)。 当我加载所有查询集并使用 (push) 命令填充 Angular 方法中的列表时,就会出现问题。 由于我的数据库中有大量记录,加载页面大约需要12秒,而且数据库正在增加,所以这个时间将会增长! 我使用时间线测试了性能,正如预期的那样,脚本花费了很长的时间!
这是我的一段代码:
模板
<script type="text/javascript">
ngApp.controller('FilterCtrl', function ($scope) {
$scope.lines = [];
{% for line in lines %}
$scope.lines.push
({
id:{{ line.id }},
name: '{{ line.name }}',
alias: '{{ line.alias }}',
owners: '{{ line.print_owners }}',
interested_in: '{{ line.print_interested_in }}',
crosses_count: '{{ line.related_crosses_count }}',
area: '{{ line.expressions }}',
});
{% endfor %}
});
</script>
浏览次数:
def browse_lines(request):
lines = Line.objects.filter(deleted=False).order_by('name')
return render_to_response('Browse_Lines.html',
{'lines': lines },
context_instance=RequestContext(request))
有什么方法可以提高性能并加快填充列表的速度吗? 非常感谢。
最佳答案
快速获胜的方法是停止将事物一一插入数组
$scope.lines = [
{% for line in lines %}
{
id:{{ line.id }},
name: '{{ line.name }}',
alias: '{{ line.alias }}',
owners: '{{ line.print_owners }}',
interested_in: '{{ line.print_interested_in }}',
crosses_count: '{{ line.related_crosses_count }}',
area: '{{ line.expressions }}',
},
{% endfor %}
];
</EndUglyCode>
现在正确的方法是发出一个单独的 get 请求来根据需要获取数据(在 Angular 主页上有很多 Angular 示例)。
分页肯定是一个好主意,但至少你可以拼接初始结果,这样你就不会一直返回 N 个对象
lines = Line.objects.filter(deleted=False).order_by('name')[:10]
如果您确实觉得需要返回所有行,那么您应该考虑是否需要对它们进行排序,因为这可能会占用大量时间。
关于angularjs - 提高绩效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35847841/