【发布时间】:2014-10-27 21:47:28
【问题描述】:
我有一个具有编辑字段的应用程序。用户将在此字段中键入搜索短语。我试图实时显示对用户文本的点击。输入三个字符后,我进行第一次搜索,然后在每个字符或退格后再次执行搜索。
问题是,随着我的搜索算法越来越先进,进行搜索需要更长的时间。用户可以比生成/显示之前的结果更快地键入。结果,该应用程序感觉迟缓/缓慢。我有几个选择: (1)。等到用户按回车键 (2)。将搜索放在不同的线程中并异步执行。有点犹豫,因为我之前从未使用过线程(3)。实现某种类型的延迟,以便如果用户仍在键入,我等待用户停止。
我倾向于选项 3,但如何检测用户是否仍在输入?我是否必须为每次击键保留一个时间戳?
【问题讨论】:
-
异步搜索。立即开始。当您准备好显示结果时显示它们。如果用户在您准备好之前输入了内容,请放弃您之前的搜索工作,然后重新搜索。
-
@David,这可能是不必要的资源浪费(当然取决于搜索的内容以及搜索方式;我们前段时间已经讨论过这个问题)。 user1009073,对于案例 3,我写了
this component。 -
一个简单的
TTimer会以很小的间隔(f.i. 250ms)和Timer1.Enabled := false; Timer1.Enabled := true;来重置编辑字段的每个更改事件的计时器。TTimer.OnTimer开始搜索 -
@TLama 这有什么关系?作为用户,我希望我的计算机资源能够用于更快地得到我的答案。
-
@TLama 在这种情况下,等待四分之一秒几乎没有任何好处。如果你不能取消 db 并且查询成本很高,那么让用户告诉你他们已经准备好了。
标签: performance delphi user-interface