Hexo中LocalSearch卡死问题

问题描述

刚开始使用hexo来架设blog,按照网上说的方法配置了LocalSearch插件。页面上出现了搜索按钮,但是点击之后一直转圈,起初以为是引用外部的什么东西,因为网速慢没有加载,但是本地反复测试一直出现。于是我尝试搜索了一下,果然有人遇到了同样的问题。

解决方案

调研

网上搜索到一片文章HEXO-NexT的Local Search轉圈圈問題
文章写的很详细,产生该问题的原因是自己写的文章中存在不可见字符:一个backspace的字符。

原理

上文作者虽然搞清楚了问题的所在,但是讲的还是不够清楚,我自己在这里整理一下,说一下问题产生的原因:

首先,LocalSearch插件会在hexo -g命令生成网站过程中,生成一个search.xml,而这个xml目的是为了便于搜索blog内容,所以search.xml文件中会包含blog文章中的内容,因此一旦文章中出现一些非法字符会引起xml语法错误,导致xml文件失效,导致搜索插件无法正常工作,也就是一直转圈。

上文作者也给出了解决方法:找到并删除这些不可见字符

但是其并没有明确说出字符的产生原因,我在修改和整理的过程中,发现我和文章作者都在使用Visual Studio Code,因此我留意了一下这个字符是如何产生的,通过观察发现了问题:貌似是code对于mac中文输入法(不知道那个作者是不是mac os)的bug。如果你在输入过程中没有成词,还在拼音过程中删除拼音,当删除最后一个字母的时候,会出现一次无法删除字母的现象,这个时候如果你再次点击删除,字母会被删除,乍看之下没有问题,但是如果你打开code的设置editor.renderControlCharacters:true,你会发现此时此处会生成一个backspace的字符。

后来我还测试了搜狗输入法等其他输入法,貌似这个问题是code的bug,因此换输入法无效的,也许需要换编辑器或者期待code更新了,但目前我不打算更换了,打开上面那个设置,在写作的过程中多注意吧。