我有一个 ExtJS 树视图绑定到一个商店,该商店有大量(~1000)个节点(每个节点都附有复选框以选择它们)和 3 级嵌套是准确的。
而且,我在树视图小部件上方有一个文本框,用户可以在其中输入节点并根据输入的文本,树视图将显示/隐藏标准的相关节点。
这里的业务逻辑是,对于从树中选择的节点的某些组合,应该只显示某些节点(无论是通过搜索还是直接显示)。
例子。
Food
|___ Vegetables
|___ Potato, Tomato, Brinjal, Carrot
|___ Fruits
|___ Banana, Apple, Grapes, Watermelon
Electronics
|___ Home Appliances
|___ TV, Fridge, A.C., Washing Machine.
|___ Personal
|___ Mobile, Tablet, Laptop
现在,考虑一下,如果用户从Fruits
类别中选择了任何项目,那么类别中的项目不Electronics > Personal
应该在树视图中可见,既不直接也不在搜索结果中可见。我知道这没有任何意义,只是为了让您简要了解关系在树视图中的工作方式。
现在的问题是,执行搜索的逻辑,基于选择隐藏/显示节点都存在,但是由于数据量很大(而且代码很旧,我们至少现在不能从头开始重写所有内容),搜索时键入往往会偶尔变慢。并且在 IE8 下速度非常慢。
在我的测试中,性能通常很慢,因为搜索框中的每个击键都会导致整个树遍历并检查/操作 UI 逻辑以及业务逻辑是否显示或隐藏它们。
change
并且考虑到标准用户的打字速度,每个字符的输入变得更慢,因为在搜索框中为每个字符进行了大量的幕后计算。
那么,我怎样才能加快这里的速度(即使数量较少)?
对于解决方案,我考虑在输入后将搜索延迟,比如 1500 毫秒,这样如果用户快速输入,treeview 可以等到他完成输入,然后使用搜索键进行搜索。但是,欢迎提出更好和可行的建议。