5

我所说的自动链接是指将内联在页面内容中的 wiki 链接生成到页面的超链接(如果存在)或创建链接(如果页面不存在)的过程。

使用我正在使用的解析器,这是一个两步过程 - 首先,解析页面内容并提取源标记中指向 wiki 页面的所有链接。然后,在生成最终的 HTML 标记之前,我将现有页面的数组返回给解析器。

处理此过程的最佳方法是什么?似乎我需要保留网站上每个页面的缓存列表,而不是每次都提取页面标题的索引。还是单独检查每个链接以查看它是否存在更好?如果列表没有被缓存,这可能会导致大量的数据库查找。对于拥有数千页的大型 wiki 站点,这仍然可行吗?

4

6 回答 6

2

在我自己的 wiki 中,我检查了所有链接(没有缓存),但我的 wiki 仅由内部少数人使用。你应该对这样的东西进行基准测试。

于 2008-08-18T14:23:06.903 回答
1

我试过这样做一次,这是一场噩梦!我的解决方案是 SQL 过程中的一个讨厌的循环,我不推荐它。

给我带来麻烦的一件事是决定在多词短语上使用什么链接。假设您有一些文字说“我正在使用堆栈溢出”,而您的 wiki 有 3 个页面,分别称为“堆栈”、“溢出”和“堆栈溢出”......您的短语的哪一部分与哪里相关联?它会发生!

于 2008-10-15T08:35:44.587 回答
1

在我自己的 wiki 系统中,我的缓存系统非常简单——当页面更新时,它会检查链接以确保它们是有效的,并为那些不是的应用正确的格式/位置。缓存的页面在我的缓存根目录中保存为 HTML 页面。

在页面更新期间标记为“未创建”的页面被插入到保存页面的数据库表中,然后插入到链接到它的页面的 csv 中。

当有人创建该页面时,它会启动扫描以查看每个链接页面并使用正确的链接和格式重新缓存链接页面。

如果您对突出显示未创建的页面不感兴趣,但是您可以只使用一个检查器来查看当您尝试访问该页面时是否创建了该页面 - 如果没有重定向到创建页面。然后像往常一样链接到其他文章中的页面。

于 2008-08-22T10:52:03.063 回答
0

我的想法是查询类似的标题SELECT title FROM articles并简单地检查每个维基链接是否在该字符串数组中。如果是你链接到页面,如果不是,你链接到创建页面。

于 2008-08-28T08:49:12.187 回答
0

根据我开发Juli的经验,这是一个带有自动链接的离线个人 wiki,生成静态 HTML 方法可能会解决您的问题。

如您所想,生成自动链接的 Wiki 页面需要很长时间。但是,在生成静态 HTML 的情况下,仅在新添加或删除 wikipage 时才会重新生成自动链接的 Wiki 页面(换句话说,更新 wikipage 时不会发生)并且“重新生成”可以在后台完成,因此通常我不管怎么花很长时间。用户只会看到生成的静态 HTML。

于 2011-09-01T00:26:20.517 回答
0

在我通过 Markdown 运行内容后,我使用 Sinatra(链接文本)制作的个人项目中,我做了一个 gsub 来用适当的链接替换 ​​wiki 单词和其他内容(如 [[Here is my link]] 等),在每个检查页面是否存在并链接以创建或查看取决于。

这不是最好的,但我在构建这个应用程序时并没有考虑到缓存/速度。这是一个低资源的简单维基。

如果速度更重要,您可以将应用程序包装在缓存中。例如,sinatra 可以使用 Rack 缓存进行包装。

于 2009-02-18T15:23:49.397 回答