搜索过滤器,我应该做客户端还是服务器端?

Posted

技术标签:

【中文标题】搜索过滤器,我应该做客户端还是服务器端?【英文标题】:Search Filter, should I do it client side or server side? 【发布时间】:2012-01-12 04:06:58 【问题描述】:

我有一个返回结果列表的搜索表单,我还有一个过滤区域,用户可以在其中过滤结果(价格等)。我的问题是,我应该通过客户端 javascript 进行过滤还是应该在 mysql 选择中在服务器端进行过滤?

问题是,过滤会有很多级别,所以当把它放到 mysql 中时,选择可能会变得很乏味。

【问题讨论】:

..., so when putting this into a mysql select could become quite tedious.。这应该从不成为将一段服务器端代码移动到客户端的理由。 我不是故意听起来那么迂腐 【参考方案1】:

这真的取决于你的应用程序的性质:

有多少数据? 您多久查询一次? 页面需要多久重新加载一次?

即 Facebook 会向您发送您的整个朋友姓名列表,因此当您在评论中输入某人的姓名时,客户端应用程序会注意到它(并建议您自动完成)。它是在客户端完成的,因为:

整个数据量相对较小(1000 个朋友姓名 * 每个 20 字节 ~= 20kB 的数据,比网站上的大多数图像少,gzip 压缩它甚至更少) 它被查询了很多次,几乎每次有人在文本框中按下一个键 应用程序中的大部分事情都可以在不离开的情况下完成,因此重新加载页面:数据只需加载一次。

一般来说,让客户端做更多的工作意味着您的应用程序可以更轻松地扩展,因为您获得的用户越多,您获得的“cpu power”就越多。

【讨论】:

【参考方案2】:

这取决于您是否使用分页

如果您不对搜索结果进行分页,而是将每一行返回给客户端,则应该过滤客户端,因为您知道客户端拥有所有数据。

如果您的搜索结果是分页的,仅显示第一个搜索结果,例如 10 个搜索结果,则需要在服务器端进行过滤以包含所有尚未在客户端中的分页行。

【讨论】:

【参考方案3】:

如果你把它放在客户端,你应该意识到后果。

    您可能需要通过 Internet 传递比您想要的更多的数据。

    您可能无法使用 MySQL 的一些好东西,例如索引或缓存来优化您的结果。这些精心设计和测试的功能总是比你的更好。

但是,如果您对这些后果感到满意,我认为在客户端执行此操作是完全可以的。

【讨论】:

我不确定我是否理解第 1 点。我最初的想法是,MYSQL select 将使用 MATCH() against() 返回结果,在此之后用户还将有一个过滤选项已经返回的行。因此,他们不是在搜索新内容,而是过滤已经返回的内容。 @user863739 如果客户端过滤器过滤掉了用户永远不会看到或期望看到的大量结果,您可能会浪费大量流量。但是如果用户想要完整的信息,并且想要多次过滤以查看差异,那么客户端过滤器是正确的选择。【参考方案4】:

它应该是您的 SQL 中的服务器端。

类似于 SELECT * WHERE price > 100

如果您在客户端执行此操作,则需要从服务器向客户端发送大量数据。

【讨论】:

另一方面,根据数据大小,利用客户端可能是有利的,因为数据只需传输一次。 好吧,我在想更多的行,返回所有行,然后使用 jQuery 过滤数据(隐藏,显示) 视情况而定。如果用户经常使用过滤,那么将数据放在客户端意味着传输的数据更少,应用程序的响应速度也会更快。另一方面,初始传输和加载可能会很慢,尤其是在有大量未过滤数据时。 嗯,MYSQL 将返回大约 100-200 行数据。没有图片只有文字。过滤是一种导航已经返回的行的方法。

以上是关于搜索过滤器,我应该做客户端还是服务器端?的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用快速、客户端反应路由器还是服务器端反应路由器?

如何在服务器端处理的数据表上使用搜索?

分页:服务器端还是客户端?

数据表延迟加载服务器端过滤器延迟

Python中 服务器端获取webservice客户端IP地址

Vue js:Vuetify 服务器端数据表搜索过滤器不起作用