首页 > 解决方案 > 在可能需要完全显示的大型请求文件的情况下的最佳实践

问题描述

案子

我正在使用 Angular@6 和 Django@2.2 实现一个 Web 应用程序。在我的应用程序中,我为用户提供了一个带有选项的表单。根据选择的选项,我向后端请求相关结果。结果是 {orderNumer: integer, message: string} 形式的行。后端响应的行数范围从 0 到 20k。

问题和我做了什么

我目前正在使用 Angular Material Table,从 django 请求整个文件(无流式传输),并且由于 angular 得到结果,我将它们传递到 angular 材质表中。

问题是在 14k 行的情况下,表格会延迟 12 秒显示此结果。我的意思是,从 Django 将所有 14k 行提取到 Angular 时,需要 12 秒才能显示。

一些限制

我注意到分页,即当用户滚动或进入下一页结果时请求块中的数据。但是,这不是我的应用程序中想要的行为。我希望用户能够下载结果,而不必一次又一次地向下滚动或进入下一页。

问题

在这种情况下有哪些最佳实践?

1)我是否将结果部分加载到角度材料表中?有办法吗?

2)从后端流式传输行而不是请求整个文件时我该怎么办?在这种情况下,我是否应该独立于文件大小来执行此操作?

标签: djangoangularangular-material

解决方案


花费最多时间的是不下载阵列,甚至不通过它。将 HTML 元素添加到 DOM 需要 12 秒。

所以,这就是我在这种情况下会做的事情:

  • 下载数组(即使是 14K 行,我认为不需要流式传输)

  • 将子数组存储在变量中,然后ng-for-trackBy出于性能原因显示此子数组(并在用户靠近显示数组的底部时添加添加行所需的代码)

  • 使用 OnPush 更改检测策略,也是出于性能原因(https://angular.io/api/core/ChangeDetectionStrategy

或者:

希望能帮助到你,


推荐阅读