java - 过滤器逻辑应该在前端还是后端?
问题描述
我正在创建一个 Web 应用程序
前端 - reactjs 和后端 java。
前端和后端通过 rest 相互通信。
在 UI 上,我显示了一个项目列表。我需要过滤它们以获得一些参数。
选项 1:过滤器逻辑在前端
在这种情况下,我只需要调用后端并获取所有项目。用户选择一些过滤器选项后,UI 上会发生过滤。
优点:为此我不需要将数据发送到后端并等待响应。刷新列表的速度应该更快。
缺点:如果我需要多个前端客户端。让我们说一个移动应用程序。比我还需要在这个应用程序上再次创建过滤器。
选项 2:过滤器逻辑在后端
在这种情况下,我会在加载应用程序时获取所有列表项。用户更改过滤器选项后,我需要发送带有过滤器参数的获取请求并等待响应。之后更新 UI 上的项目列表。
优点:过滤器逻辑只写一次。
缺点:速度可能会慢得多。因为发送请求并返回结果需要时间。
问题:过滤器逻辑应该在哪里?在前端还是在后端?或者也许什么是最佳实践?
解决方案
后端过滤和限制。如果您有一百万条记录,并且有十万用户试图同时访问这些记录,您真的想向每个用户发送一百万条记录吗?它会杀死您的服务器和用户体验(等待从后端为每个用户传播一百万条记录,然后在前端传播与仅获取 20-100 条记录然后单击(分页)相比需要很长时间按钮检索下一个 20-100)。最重要的是,再一次在前端过滤一百万条记录将花费很长时间并且最终不是很实用。
从现实世界的角度来看,大多数网站都有某种记录限制:Ebay = 50-200 条记录,Amazon = ~20,Target = ~20... 等等。这确保了快速的服务器响应和每个用户的流畅用户体验.
推荐阅读
- sql - 将“现在”行添加到持续时间计算
- apache-beam - Apache Beam Python 窗口化和 GroupByKey
- windows - 如何编写 powershell 脚本来知道磁盘是基本的还是动态的?
- git - 仅从 git hub 下载特定文件夹
- javascript - Testing routes to give same results on every request chai/mocha
- c++ - 调整 Scatter Gather List 缓冲区地址和长度
- python - 使用 Python 写入目录中的所有 *.txt 文件
- flutter - 滚动在使用 ListView 创建的垂直列表中不起作用?
- javascript - 如何在当前 Web 应用程序的 iframe 中使用有效令牌?
- mysql - 在 Sequelize 中使用 MySQL FIELD 函数