我在flex中尝试做的是在用户在textinput中键入搜索关键字时执行搜索。查询在后台运行,从sqlite中获取数据并完美地显示它。 问题在于大型数据库/大型结果集。当我查询> 10000行数据时,延迟非常明显。当用户一直输入并且每次按键触发查询时,这都是一个令人担忧的问题。
示例: - 假设用户想要搜索关键字“hello”。 当用户输入时,附加到textinput的keyup事件会在后台触发查询。所以在这里,将会有5个keyUp事件被触发,即5个查询。
我在这里尝试实现的是一些性能,并通过尝试向keyUp事件添加延迟来减少不相关的搜索。
<s:TextInput id="searchBox" keyUp="search()"/>
public function search():void{
searchForKeyWord(StringUtil.trim(searchBox.text));//fires a SQL query
}
有人可以帮助我理解在查询被触发之前我怎么能在这里添加一个延迟(比方说2秒)。 2秒后,如果输入已更改,则延迟时间为2秒,依此类推,直到搜索关键字保持不变2秒钟。
如果有更好的办法(而不是添加计时器等),请告诉我。
答案 0 :(得分:1)
您可以使用计时器。这符合你的情况。 当用户键入时,输入search()。如果计时器没有运行,请启动它(带有 两秒延迟)。在Timer上为timerComplete事件设置一个监听器,并在处理函数中执行搜索查询。
每次输入search()函数时,重置计时器以重新开始。这样可以防止在打字过程中发生多个查询。
那里有很多计时器例子。