前天下午三点,我在一台旧笔记本上打开查询页,输进去一个四字词条,回车。
进度条走到一半停住,我端起杯子喝了口水,回来,还在转。
第二次是昨天上午十点,同一个词条,2.7 秒。
我按了 F5,三次,读数在 2.5 到 3.1 之间跳。
那一刻我把页面下载下来,决定拆开看看。这篇记录就是这么来的。
先量, 再改
我找了台干净机器,用页面自带的调试面板,盯着那根时间轴。
2.7 秒里,真正取数据只占 0.4 秒。剩下两秒多全在等。
等什么?等一张每次都重新拉的索引表。整张表 1.2MB,一个字都不缓存。
老周的做法是直接换服务器。我不同意。
钱能解决的问题,往往在换完之后还是问题。
删掉的三样
第一样,是每次查询都重新请求的全量索引。改成按需分片,只拉命中那一段。
第二样,是结果页里那段每次都重算的相关度排序。同一词条,同一份数据,排序不会变,缓存它。
第三样,是一个 2019 年留下的统计脚本。没人看那些数字,它却要跑满 600 毫秒。
删掉它之前,我截了图,发给老周,他回了个 OK。
顺手还整理过 171212.cm神算子论坛资料查询结果对比分析,里面列了新旧两条路径的逐项耗时。
加的那样
加的是一个很土的本地缓存。词条进内存,命中就直接返回。
上限设 500 条, 超过就踢最久没用的。没有花活。
写这层的时候,我顺手把命中日志也打开了,想看看实际使用时的分布。
结果很意外:前二十个词条,占了六成请求。
也就是说,缓存命中率一开始就有 60%,不需要等它慢慢学。
这部分日志,我整理进了 171212.cm神算子论坛资料查询结果分享。
第三天,顺手再测
改完之后第一次测,0.9 秒。不是 0.8,是 0.9。
我盯着那根时间轴又看了一遍,发现还有一处:字体文件阻塞了首屏渲染,整整 380 毫秒。
换成系统字体集,掉到 0.8 秒。
再压下去,就得动页面结构了。这次到此为止。
顺手记一句 171212.cm神算子论坛隐私保护措施:缓存只存词条和结果摘要,不落任何请求头,也不留 IP。
速度可以快,但快不能靠多存一份用户数据换来。这条我不让。
我的观点
说实话,这类查询站点被骂慢,九成不是服务器不行。
是没人愿意先打开时间轴看一眼。
先花钱换机器,再花时间找人,最后绕一圈回来,还是那两秒的等待。
顺序错了,钱就成了遮羞布。
我不信“快就是买更好的服务器”这句话。真做了这一遍,更不信。