作者IepID (Iep Iweidieng)
看板PttBug
标题Re: [问题] ptt的bug。
时间Mon Jul 5 02:35:59 2021
※ 引述《holishing ( )》之铭言:
: 推 holishing: 如果过一阵子才正常,那就是已知问题 07/04 14:11
※ 引述《roujuu (老中)》之铭言:
: 是因为 ptt 这个bbs的程式写法的关系吗?
: 「过一阵子才正常」是因为程式的写法并不是随时都去运算以更新相关方面的搜寻结果?
根据 PttBBS 的原始码,的确是这样的。
请见:
https://github.com/ptt/pttbbs/blob/7b35778243/common/bbs/search.c
以下对处理逻辑的说明,主要是根据此程式码所得出的。
common/bbs/search.c 包含以下两个处理文章搜寻的函式:
select_read_should_build() 与 select_read_build()。
select_read_build() 会更新或重新建立搜寻结果,并建档储存。
而储存的档案,以下称之为「搜寻结果档」。
注意不同的搜寻条件会对应不同的搜寻结果档。
请见 mbbsd/read.c 中的函式 select_read():
https://github.com/ptt/pttbbs/blob/7b35778243/mbbsd/read.c#L651...L720
select_read_should_build() 会决定是否需要更新或重新建立搜寻结果。
首先,如果搜寻结果档尚未建立,就需要重新建立搜寻结果。
接着,这个函式会检查看板的 SRexpire。
(SRexpire 应该是最近一次对此看板进行需要重新建立搜寻结果的操作的时间)
如果搜寻结果档比 SRexpire 还早建立的话,就需要重新建立搜寻结果。
检查完 SRexpire 後,会再检查搜寻结果档的更新时间(未更新过则为建立时间)。
如果搜寻结果超过 1 小时未更新,就会重新建立搜寻结果。
如果距上次更新未超过 1 小时,但超过 3 分钟未更新,
就会以目前的搜寻结果档为基础,更新搜寻结果。
如果距上次更新未超过 3 分钟,则会直接使用目前的搜寻结果档当作搜寻结果。
此外,当搜寻条件包含 m/s 标记或推文数时,
只要搜寻纪录的更新时间距上次更新超过 3 分钟,就会一律重新建立搜寻结果。
请见:
https://github.com/ptt/pttbbs/blob/7b35778243/mbbsd/read.c#L700...L701
因此,若是遇到此类问题,目前暂时的因应方式是先等待 3 分钟後再重新搜寻。
若仍然遇到问题,则可尝试增加 m/s 标记或推文数的搜寻条件。
而从系统端解决的方式之一,则是找出会导致搜寻结果与文章列表不合的文章操作,
并使看板的 SRexpire 在这些操作後被更新,让下次搜寻能使用重新建立的搜寻结果。
※ 引述《roujuu (老中)》之铭言:
: 【板主:u10400068/zouelephant/redDest..】[希洽] Steam夏季特卖登场 看板《C_Chat》
: [←]离开 [→]阅读 [Ctrl-P]发表文章 [d]删除 [z] [i]看板资讯/设定 [h]说明
: 编号 日 期 作 者 文 章 标 题 人气:818
: 346277 +43 6/27 dzwei □ [闲聊] やなぎなぎ最经典的歌曲是哪首?
: 346278 + 6/27 dalyadam □ [实况] Forsen 玩(Bro Falls)恶搞?抄袭?
(恕省略以下内容……)
至於问题报告的内容,个人觉得以画面撷图为主来叙述的话,
读者会需要看图说故事,且文章篇幅会较大,因此阅读上可能会比较不容易理解,
而引用上可能也会有不甚方便之处。
如果能确定画面中有助於判断问题的部份的话,仅保留该部份有助於减少文章篇幅。
但若不清楚画面中须要保留的部份,而不便取舍的话,
如果每张撷图都有文字说明此撷图所对应的操作步骤,读者会更容易理解。
而如果能从问题报告的标题看出此问题的大致的类型,甚至大致的症状的话,
也可以帮助站方与协助维护程式的人员判断此问题的重要程度。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.116.130.29 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PttBug/M.1625423764.A.64C.html
目前 select_read_build() 以某个搜寻结果档为基础,更新搜寻结果时,
并不会更动此搜寻结果档中已存在的文章项目。
所以如果搜寻结果中与文章列表不合的项目已在搜寻结果档中,
需要等待 1 小时後再重新搜寻,以重新建立搜寻结果。
但距搜寻结果的更新时间未超过 1 小时之时,任何人进行条件相同的搜寻,
都会造成更新时间被重设为进行搜寻的时间,而需要重新等待 1 小时。
因此,如果使用的搜寻条件较为热门,等待 1 小时的因应方式会较不可靠,
而使用增加条件的因应方式会较可靠。
※ 编辑: IepID (140.116.130.29 台湾), 07/05/2021 03:22:51