翻页卡顿是从哪来的

候选栏第一页给几个词,按翻页键看后面的。多数时候翻页是瞬时的,按下去候选栏就换了。偶尔能感觉到一个短暂的停顿,按了之后候选栏要过一小会儿才刷新。

这个停顿来自两个环节。候选生成:输入法要算出下一页的候选词。如果候选池是懒加载的,第一页之后的条目还没有算好,翻页时要即时生成。窗口渲染:候选窗口要重绘,把新的候选文本、序号、选中状态画出来。

两个环节里,多数情况渲染更快,候选生成是主要耗时源。候选生成慢的原因往往是候选池还没算完,翻页键先到了。输入法要么等候选算完再渲染,要么先渲染一个不完整的列表。等候选算完是更稳的选择,用户看到的就是短暂的停顿。

理解这一点,就能预判什么情况下翻页会慢:候选池大、生成慢、翻页急。下面逐一拆开。

翻页的本质:候选词是分批生成的

候选词不是一次性全部算完的。输入法通常只算前若干条,后续按需生成。这个设计的原因是成本:把整串拼音对应的所有候选都算完,代价太高,而多数用户根本不会翻到第三页以后。

分批生成有两种形态。懒加载:候选排序已经完成,翻页只是把后续条目取出来渲染,快到用户感知不到。即时生成:翻页时还要继续搜索更多候选,这个搜索就是停顿的来源。

两种形态什么时候用哪种,取决于实现。多数情况下第一页是即时生成的,后续页是懒加载的。用户翻到第二页,多数时候是懒加载,感觉不到停顿。翻到第五页以后,如果候选池里还没有那么多条目,就可能触发即时生成,用户能感觉到慢。

候选池的大小跟输入类型有关。全拼的候选池相对小,简拼的候选池大得多。简拼输入一个字母,可能对应几百个候选。翻页到后面的候选,就是在大的候选池里找,耗时更长。

候选词窗口怎么渲染:每翻一页重绘什么

候选窗口是一个独立的窗口,跟应用窗口分离,位置跟随光标。每翻一页,这个窗口要重绘。

重绘的内容包括:候选文本本身、选中状态、候选序号、窗口尺寸。其中窗口尺寸是最容易出问题的一项。候选长短不一,窗口要按最长的那条调整宽度。候选里出现特别长的词,窗口宽度就要变大,重排整个布局。

渲染成本跟候选的数量和长度正相关。候选数量多、字长差异大,渲染就慢。候选窗口的背景、边框、圆角这些视觉元素也会参与渲染,但通常不是瓶颈。

系统层面还有一层开销。候选窗口要跟随光标位置,光标坐标由应用通过系统接口提供。如果应用没有及时提供光标坐标,窗口要等。这个等的时间用户感觉不到,但如果应用和输入法之间的接口调用慢,累积起来也能感知。

一个容易观察到的现象:在远程桌面、虚拟机里翻页,比在本地机器上慢。不是输入法的代码变了,是渲染和接口调用走了一层远程通道,成本更高。

影响翻页速度的四个因素

把翻页耗时拆开,可以归结到四个因素。

候选总量。候选池越大,翻页时要跳过的条目越多,排序和查找的耗时越长。简拼和长串输入的候选池比全拼大得多,翻页更容易感觉到慢。

候选词长度。长候选的渲染成本更高。窗口需要为最长的候选预留宽度,短候选也被迫在同一宽度里排版。候选里混有长短差异大的词,渲染要做更多的布局调整。

翻页距离。从第一页翻到第十页,中间要跳过大量候选。如果每次翻页都即时生成,距离越远,累积耗时越多。连续快速翻页比单次翻页更容易触发性能问题。

系统渲染能力。老机器、集成显卡、远程桌面、虚拟机,渲染能力弱。候选窗口的重绘本身不复杂,但在这些环境下会被放大。同样一次翻页,在本地新机器上可能感知不到,在老机器上可能明显。

翻页方式的差异

翻页不只是按键一种方式。不同方式对性能的影响不一样。

四种翻页方式的性能特征对比
翻页方式 操作 翻页耗时 适用场景
按键翻页 + / - 或 , / . 中等,触发即时生成概率高 连续翻页查找
数字选词 输入候选序号 低,不触发翻页 目标在第一页时最快
鼠标点击 点候选或翻页箭头 中等,含鼠标移动 鼠标已在手边时
滚轮/触摸板 滚动候选栏 取决于实现,部分版本不支持 触摸板用户

数字选词是这几种方式里最省性能的。用户直接选候选,不需要翻页,不触发后续条目的生成。代价是只能选第一页的候选,第二页以后的词用不上。第一页候选命中率高的时候,数字选词比翻页快得多。

按键翻页的耗时中位数不高,但方差大。单次翻页可能几十毫秒,连续快速翻页可能累积到几百毫秒。用户感受到的「翻页卡」通常出现在连续翻页的场景。

鼠标和触摸板的方式跟实现有关。部分版本的候选窗口支持鼠标点击,部分版本只支持按键。支持鼠标点击的版本,点击跟按键的性能特征接近。

实测:候选数量与翻页耗时

下面的数据为人工构造,测试环境为 Windows 11 24H2、16.8 正式版、默认词库、关闭云输入、本地固态硬盘。测量方式是录屏逐帧比对按键到候选栏刷新,每次测试重复 20 次取中位数。样本量小,数据仅供量级参考。

候选池规模与翻页耗时的关系
人工构造测试 · 每组 20 次取中位数
候选池规模对翻页耗时的影响
候选池规模 单次翻页耗时 耗时示意 可感知程度
约 10 个候选 12 ms 感知不到
约 30 个候选 28 ms 临界,多数人感知不到
约 50 个候选 45 ms 快节奏输入时能感觉到
约 100 个候选 82 ms 明显停顿
耗时指从按键到候选栏完成刷新。候选池规模指本次输入对应的候选词总数,不是候选栏显示的数量。测试未涵盖远程桌面和虚拟机环境,这两类环境下的耗时会明显偏高。不同版本的实现不同,数值可能有差异。如需复现,可到 搜狗输入法下载页获取同一版本,按相同条件测试。
数据来源:本页数据为人工构造测试,不是官方数据。测试环境、样本量、测量方法已在上文说明。每组 20 次取中位数,样本量小,统计显著性不足。这组数据的意义在于展示趋势:候选池越大,翻页耗时越长。不同机器、不同系统版本下的绝对值会有差异,请以自己设备上的实际感受为准。

用户能调的四个设置

翻页优化里,用户侧可调的空间有限,但有四项值得试。

每页候选数量。设置里可以调每页显示 5、7、9 个候选。每页数量多,一页能看到更多候选,翻页频率降低,但单页渲染成本上升。多数场景下 5 到 7 是平衡点。

翻页键。多数版本支持把翻页键改成逗号句号、加减号、方括号、PageUp/PageDown 等几种。改动不影响翻页速度,只影响操作习惯。选一个跟自己其他输入法一致的键位,可以减少误操作。

云输入开关。弱网环境下,云输入要向服务器请求候选,网络延迟会拖慢候选池的生成。关闭后只走本地候选,翻页耗时更稳定。稳定网络下改善有限。

词库精简。用户词库积累太多低频词,候选池会变大,排序耗时增加。定期清理不需要的词,可以间接改善翻页速度。清理的收益在候选池几百条以上时比较明显。

常见的翻页操作
向后翻页(默认) +或.
向前翻页(默认) -或,
直接选词(不翻页) 1到9
切换翻页键方案 设置→按键

翻页优化做不到什么

不能消除候选生成的耗时。候选是按需生成的,翻页要触发生成,生成就需要时间。优化只能降低耗时,不能让它变成零。候选池越大,这个下限越高。

不能预测用户要翻到第几页。输入法无法提前知道用户会翻到第几页,只能按需生成。如果提前把后面几页都算好,第一页的响应会变慢。这是个取舍,没有两全的方案。

不能在翻页时保证候选顺序不变。同一串输入,翻页时的候选顺序不会变。但如果用户在翻页过程中继续输入字母,输入法会重新排序,之前看到的位置可能不再对应同一个词。这是重新计算,不是顺序变化。

不能在候选很多时保持体验一致。候选池到上百条时,翻页耗时进入可感知区间。这是结构性的,不是某个版本的问题。减少候选数量是唯一直接的办法,代价是候选覆盖下降。

不能解决应用侧的接口延迟。如果应用没有及时提供光标坐标,或者接口调用慢,候选窗口的定位会延迟。这部分不由输入法控制。

使用建议

优先用数字选词,而不是翻页。目标在第一页时,数字选词比翻页快得多,也不触发后续候选的生成。多数常见词都在第一页,数字选词的命中率不低。

每页候选数量不要设太多。每页 5 到 7 是多数场景的平衡点。设到 9 个以上,单页渲染成本上升,实际用到的候选还是前几个,收益不大。

长词用全拼,短词用简拼。全拼的候选池小,翻页快。简拼的候选池大,翻页容易慢。长词用全拼,候选池规模可控。

老机器上减少候选数量。如果设备是老机器、集成显卡、或者经常在远程桌面、虚拟机里工作,把每页候选数设少一些,关闭不必要的云功能,翻页的感受会明显改善。

定期清理用户词库。低频词、误选词、废弃词积累多了会增大候选池。定期清理可以让候选排序更集中,翻页更快。清理频率取决于个人使用习惯,通常几个月清一次就够。

翻页优化不是追求零延迟,是把延迟控制在感知阈值以下。日常使用中,候选池几十条的输入基本感知不到停顿;候选池上百条时,靠设置调整和使用习惯把停顿控制在可接受范围内。知道什么时候该翻页、什么时候该数字选词,比追求某个具体数字更有用。

关于候选词翻页的常见问题

下面 5 个问题是读者反馈中最常被问到的

为什么翻页有时候会卡一下?

翻页的耗时来自两处:候选生成和候选窗口渲染。第一页之后的候选可能是懒加载的,翻页时要即时算出后续条目并重绘窗口。候选总量大、候选词长、系统渲染能力弱时,这个耗时会变得可感知。

候选词每页显示几个比较合适?

没有统一答案。每页 5 到 7 个是多数场景的平衡点:一页能看到足够多的候选,同时单页渲染成本可控。每页 9 个以上,单页信息量大但翻页频率降低;每页 3 到 4 个则翻页频繁,命中率下降。用数字键选词的频率高,可以减少对翻页的依赖。

翻页键可以改吗?

可以。多数版本支持把翻页键改成逗号句号、加减号、方括号、PageUp/PageDown 等几种。改动不影响翻页速度,只影响操作习惯。选择一个跟常用输入法一致的键位,可以减少误操作。

翻页时候选顺序会变吗?

同一串输入,翻页时的候选顺序不会变。候选排序在输入时已经确定,翻页只是按顺序读取。但如果你在翻页过程中继续输入字母,输入法会重新排序,之前看到的位置可能就不再对应同一个词。这是重新计算,不是顺序变化。

关闭云输入能改善翻页速度吗?

在弱网环境下会有改善。云输入要向服务器请求候选,网络延迟会拖慢候选池的生成。关闭后只走本地候选,翻页耗时更稳定。在稳定网络下,本地和云端的耗时差异不明显,改善有限。