在接收要显示在前端的数据时,建议对前端的数据执行附加逻辑-例如检查列是否包含特定值,然后隐藏列,还是应该在后端执行此操作,后端应该返回一个布尔值?
我担心的是,当数据增长时,它将严重影响浏览器中应用程序的性能。如果是的话,在与不同意/不想花时间去做的人的讨论中应该使用什么论据?
我正在使用Angular ngFor显示数据,但是显然我需要在构建DOM之前执行该逻辑。
答案 0 :(得分:3)
是的,这样做是明智的。但是很少有情况需要考虑:
方案1:有大约一百万个客户,每个客户拥有约1000行的数据。 在这种情况下,最好在客户端进行大多数过滤,从而减少服务器上的负载并可以处理更多请求。
方案2:任意数量的客户,每个客户持有约10000或数百万行的数据。在这种情况下,我们必须进行服务器端分页,因为我们不应该传输整个数据。客户端上应用的每个过滤器都可能触发服务器调用以获取数据。
通常,客户端过滤不会影响应用程序的性能,因为笔记本电脑/ PC /框架现在可以轻松处理负载。但是,我们不应该考虑发送约数百万行的数据,而是尝试在客户端执行操作。这将影响客户端和服务器的性能。
答案 1 :(得分:1)
对此有两种不同的方法。我总是建议的第一件事是将您的后端当作某种公共API对待,而这些API对您的前端视图一无所知。这种回答已经在很多用例中得到了解决。如果您的API构建正确(并且没有返回奇怪的/混合的/不一致的返回值),则通常返回“一切”即可。
您需要记住的第二件事是您正在谈论的数据量。好吧,如果它是具有20个属性的对象的1000个数组条目的数据集,那就不用担心-Angular(和JS)的速度非常快,您甚至不会注意到带有10个条目或1.000或10.000的数组之间的差异(请求大小可能是一个因素。但是对于常规文本返回,我们仍然只讨论kB,而今天的互联网速度就不成问题了。
下一件重要的事情是,在JS和DOM中处理大型数组/对象之间是有区别的。拥有常规的ngFor并同时显示10.000个条目肯定会减慢/滞后浏览器。但是对于这种情况,您可以使用某种虚拟重复,仅呈现10-50个条目(当前在DOM中可见),并且在滚动时,它们只是被重用而不是创建新条目。
最后一点是尝试编写性能检查。您说过要根据结果隐藏/显示列。好吧,如果只需要对其进行一次评估,请尝试将其置于变量/“一次性绑定”中,而不是在每个摘要循环中检查相同条件。如果因为检查很复杂而花费了很长时间,请尝试对可能更改值的事件做出反应,而不是检查每个摘要周期。
那么,从这篇简短的文章中学到什么呢?