Onebox 有一点让我有些困扰,那就是其内容会被缓存到帖子中,除非编辑帖子,否则即使修改了相关字段,内容也不会更新。
例如,我们从一个账号创建了 OneBox,一周后用户修改了自己的个人简介……
Onebox 有一点让我有些困扰,那就是其内容会被缓存到帖子中,除非编辑帖子,否则即使修改了相关字段,内容也不会更新。
例如,我们从一个账号创建了 OneBox,一周后用户修改了自己的个人简介……
每次查看页面时都重新下载 Onebox 会显著降低速度。如果 Onebox 从未更改,重新下载它显然是不明智的。由于无法判断其是否已变更,因此强制触发帖子重建(通过扳手图标或编辑)是最佳做法。如果您知道某个分类下很可能包含需要定期更新的 Onebox,可以创建一个插件,例如每天重新生成该分类下的所有主题。
通常情况下,Oneboxes 会被缓存,因为你需要在本地限制对外部站点的抓取频率,以防止被封禁!(当然,缓存也能带来性能提升!)若偶尔需要绕过缓存,只需在链接末尾添加一个假的查询字符串,例如:
?myname=isbill
或类似内容。
这将触发刷新。
Onebox 缓存对于外部内容绝对必要,且不应期望其会被刷新。我指的是内部 Onebox。正如我在上面的示例中提到的,用户创建的 Onebox 应通过修改个人简介,在所有站点上得到更新。
此外,内部内容的 Onebox 也应进行缓存,这对于降低负载是必要的。不过,将内部 Onebox 索引到某处或许也无妨;如果源记录发生变化,可以为其调度更新任务。
在当前情况下,如果 Discourse 更新了 Onebox 的格式(针对内部情况),旧帖子中的 Onebox 仍将沿用原有模式显示。如果我们把 Onebox 的内容以 JSON 格式缓存到帖子中,并由客户端进行格式化,这一问题将得到解决。
我正在为我的站点构建 Onebox 支持功能,但编辑帖子并未刷新 Onebox 缓存。此外,我在扳手菜单中也未找到“帖子重建”选项。
不过,添加一个假的查询字符串确实有效,但一旦返回初始 URL,缓存版本又会重新显示。
我是否遗漏了某个设置或技巧?
我的版本是:Discourse 2.5.5
请小心,有时在站点前使用 CDN 作为代理并启用代理中的缓存层可能会引发问题。如果您正在使用 CDN 作为代理(如 Cloudflare),请暂时关闭它,然后再次检查问题。
我不熟悉 CDN,也没有使用 Cloudflare。我只是在我的网站上添加 og: 元数据,以实现 OpenGraph,从而支持 Onebox。
因此,我正在对自己的网站进行大量修改,并希望查看当这些内容从 Discourse 引用时是如何显示的。
我注意到编辑帖子并不会导致 Onebox 刷新链接。在 URL 中添加 ?x=1 则可以刷新。
每次编辑帖子时,Onebox 是否应该重新扫描目标 URL?
我还没看到多少人响应这个问题……在我看来这似乎是个 bug。除非有一个复选框控件可以开启或关闭 Onebox 刷新功能?
作为一个替代方案的例子,这个页面允许你测试你的元数据,查看最终会显示什么内容,同时它也是 Facebook 缓存的前端界面。
有趣的是,他们的 OpenGraph 标签似乎有问题!![]()
如果你在这个工具中输入一个 URL,它会获取缓存结果,然后提供一个按钮,你可以用它重新抓取网站以更新他们的缓存。
这或许可以作为本工具的一个不错的选项……也许可以添加一个按钮,当鼠标悬停在已缓存的 URL 上时显示出来?
目前,我在实现此功能时的首次测试将始终基于某些链接上显示的内容。
我们也在寻找刷新 onebox 的方法,具体是指刷新我们论坛中其他主题的 onebox。
我们的使用场景是在整个论坛中构建文档,这些文档可能会重新组合其他 wiki 帖子。但由于这些是 wiki 帖子,onebox 无法随着可能随时间进行的多次编辑而保持更新,这显然不是理想状态。
如果我们能有一个设置,自动刷新那些匹配我们论坛域名和/或属于该使用场景所在类别(wiki/文档)的 onebox,那就太好了。
随着我在主站点(通过 SSO 与 Discourse 关联)上逐步构建 OpenGraph 支持,我遇到的这个问题越来越多。
有一个小技巧非常有效:我不再(或者从未)直接插入实际 URL。相反,我采用了 @merefield 在上面建议的技巧:
我首次引用每个 URL 时,会在末尾添加一个 ?n=1。如果 onebox 显示效果不佳,我可以更新页面,然后递增我的 N 变量并迭代,直到效果满意为止。
完成后,任何只插入该 URL 的人都将获取该页面的最终抓取结果,而不是第一次抓取的结果。