xmflswood/pinyin-match

词库9万检索直接崩了

superlbr opened this issue · 8 comments

。。

测试了10W长度的文本没问题,
9W是指列表数量吗? 可不可以给个代码示例我测试下?

我这里试了50W条数据,每条为 3个中文加一串数字,用时2.3s,内存也没有明显变化
impicture_20220827_151450

impicture_20220827_151422

推测是不是其他部分导致的?
比如同时展示太多数据,导致dom数量太多(考虑分页)
或者采用响应式,导致键入后马上开始计算(考虑防抖)

@superlbr
这个不是因为这个库导致的,这个场景下主要是由于dom数量太大,且数据在vue中是保存在data中响应式导致的(当然也包括标红的代码部分)。
在这个情况下即使是直接采用indexOf直接匹配也有问题。(你可以试试输入中文,输入中文的情况下,这个库会直接采用indexOf来匹配,跟pinyin无关,在我这里看也是直接崩溃的)


我测试了下,如果是手动输入yonghu,就会崩溃,如果是直接粘贴yonghu就不会(不打开F12,否则即使是输入中文也会崩溃)
impicture_20220827_155108
可以试试把input部分改成防抖减少计算。
当然这个做法还是有崩溃的风险
改为分页展示 + input防抖 就好了。

计算过程按我的测试,50W条人名数据大概占用0.8秒(单条人名2-4字符)
impicture_20220827_155630
impicture_20220827_155637
impicture_20220827_155704

主要是想验证下js拼音输入的可行性,如果不是标红而是展示列表应该好一些。对比了下pinyin-engine,感觉还可以再压榨一点性能。

好像没看到建索引。。

@superlbr 两个库的实现是不一样的,不建索引主要是考虑长字符串或者长多音字的时候的性能问题。
pinyin-engine-issues

长串就不走索引,设一个阀值