我正在创建一个网络应用程序
前端-reactjs和后端Java。
前端和后端通过休息彼此通信。
在UI上,我显示项目列表。我需要过滤一些参数。
选项1:过滤器逻辑位于前端
在这种情况下,我只需要对后端进行一次get调用并获取所有项目。 用户选择了一些过滤器选项后,ui上就会进行过滤。
专家:为此,我不需要将数据发送到后端并等待响应。刷新列表的速度应该更快。
缺点:如果我需要多个前端客户端。假设有一个移动应用。比我还需要在此应用上再次创建过滤器。
选项2:过滤器逻辑位于后端
在这种情况下,我在加载应用程序时会得到所有列表项。用户更改过滤器选项后,我需要发送带有过滤器参数的get请求并等待响应。 之后,更新UI上的项目列表。
优点:过滤器逻辑仅编写一次。
缺点:速度可能会慢很多。因为发送请求和返回结果需要时间。
问题:过滤器逻辑应该在哪里?在前端还是后端?也许什么是最佳做法?
答案 0 :(得分:5)
过滤和限制后端。如果您有一百万条记录,并且十万个用户试图同时访问这些记录。您是否真的要向每个用户发送一百万条记录?这会杀死您的服务器和用户体验(与仅获取20-100条记录然后单击一个按钮进行检索相比,等待每个用户从后端传播一百万条记录,然后在前端传播会花费很多时间。接下来的20-100)。最重要的是,要再次过滤前端的一百万条记录,将花费很长时间,并且最终并不实用。
从现实世界的角度来看,大多数网站都有某种记录限制。 Ebay = 50-200条记录,Amazon =〜20,Target =〜20 ...等等。这确保了快速的服务器响应和每个用户的流畅用户体验。
答案 1 :(得分:3)
这取决于您的应用程序的特定要求,但我认为更安全的选择是后端。
首先考虑到需要过滤,我假设您有足够的数据,因此需要进行分页。在这种情况下,您需要在后端进行过滤。
假设您的页面大小为20。应用过滤器后,您期望页面中包含20个与UI中特定过滤条件匹配的实体。如果您获取20个实体,将它们存储在前端,然后对它们应用过滤器,则无法实现。
此外,如果有足够的数据,由于内存限制,将不可能在前端提取所有数据。
答案 2 :(得分:3)
这取决于您的数据大小。 例如:如果您有大量数据,最好在后端实现过滤器逻辑,并让数据库执行操作。
如果数据量较少,则可以在获取数据后在前端进行过滤逻辑。
让我们通过一个例子来理解这一点。 假设您有一个拥有1,00,000条记录的实体,并且希望将其显示在网格中。 在这种情况下,每次调用最好获得10条记录并将其显示在网格中。 如果要对此执行任何过滤操作,最好在后端查询数据库并获取结果
如果您的实体中只有1000条记录,则在前端获取所有数据并执行所有筛选操作将是有益的。
答案 3 :(得分:1)
最有可能从前端开始(除非您要处理大量数据):
作为个人笔记,可接受的答案是可怕的建议:
TL / DR:在对您更方便的地方进行,并且不必担心,直到开始进行优化为止。