Skip to content

Conversation

ZnPdCo
Copy link

@ZnPdCo ZnPdCo commented Sep 24, 2025

研究了一下前端搜索的 bug,主要有下:

  1. 搜索太快,搜索框卡住弹不出来
  2. 输入太快会返回两次结果,有概率会显示以前的结果而非新的结果。比如你搜 fwt,会有两次请求,一次是 fw,返回 访问 有关的词条,第二次是 fwt,就是正常的 fwt。因为要请求搜索服务器,所以会慢一点,而且顺序不分先后,很大概率会直接返回 fw——访问 的词条。

所以这个 pr 修改了两个地方。一个是添加了输入框防抖;另一个是禁用了 enter 默认是选择最优项(可以用上下键选择之后再 enter),这是因为有人搜索习惯性输入一个词之后直接 enter,那这样防抖也没办法处理,肯定会访问错误的页面,服务器返回的速度肯定赶不上 enter 的速度,所以就把这个快捷键 ban 掉了。

当然,实现非常丑陋。禁用 enter 这个是直接将对应代码注释了;而输入框防抖改起来太难了,我研究了很久都改不掉 😫,现在的处理方式是添加一个最先执行的脚本 hook 住 addEventListener,再往搜索框添加 keyup 事件时会下一个钩子:要防抖之后才能执行。

如果有更好的改法,欢迎交流 ❤️。

@Enter-tainer
Copy link
Member

@ZnPdCo 还没看代码,现在是无脑全禁enter了吗?maybe是改成,只有在还有inflight的请求的情况下,才禁用enter会更好一点?

@ZnPdCo
Copy link
Author

ZnPdCo commented Sep 24, 2025

@ZnPdCo 还没看代码,现在是无脑全禁enter了吗?maybe是改成,只有在还有inflight的请求的情况下,才禁用enter会更好一点?

那这样看起来要大改了,或者有比较丑陋的方式:每次enter后判断一个全局变量表示是否还在加载。

@ZnPdCo
Copy link
Author

ZnPdCo commented Sep 26, 2025

不过 material for mkdocs 将在今年年底前发布一个支持 server side search 的新版本1,届时这些问题都应该可以解决2

Footnotes

  1. https://github.com/squidfunk/mkdocs-material/discussions/8461

  2. https://github.com/squidfunk/mkdocs-material/issues/6307#issuecomment-3332852574

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants