在我的数据库中,我有一个已降价的文本。与显示问题摘录时的方式相同,我想获取文本的前 N 个字符,即必须删除所有格式。当然,必须避免 MD -> HTML 步骤,并且必须在 MD 编辑的文本上完成工作。性能是一种要求。谢谢。
4 回答
在我的数据库中,我有一个已降价的文本。与显示问题摘录时的方式相同,我想获取文本的前 N 个字符,即必须删除所有格式。
我们将文本的两种表示形式都存储在数据库中:
- Raw Markdown 适合编辑
- 适合输出的 HTML 化版本
当我们显示它时,我们使用 HTML 化的输出版本并简单地应用我们的标准 HTML 剥离算法。
如果我误解(或只是理解)你需要在这里做的事情,请原谅我,但我突然想到,如果阅读量(页面浏览量)多于插入量(添加新的降价记录)到这个数据库,从性能的角度来看,您可以通过将所有标记剥离到数据库中的单独字段中的文本版本来获得最大的收益。这样,您的前端就不必在显示给浏览器之前反复解析从数据库中读取的内容......当添加新记录时,它只会被解析一次。
从性能的角度来看,这是否真的有意义取决于特定于您的情况的各种变量......文本条目有多大,插入记录与读取记录的频率等。
我处理这个问题的方法是为包含/表示标记的文本的类定义一个格式化程序接口。然后,您将拥有支持 HTML 格式和纯文本格式的具体实现。您需要做的就是注入正确的实现并调用格式化程序。
您的纯文本格式化程序可以简单地遍历字符串中的字符,复制字符直到遇到一些降价。然后它会跳过降价并在遇到文本时再次开始输出。
public interface IFormatter
{
string Format();
}
public class HtmlFormatter: IFormatter
{
public Format()
{
return ...string translated to HTML...
}
}
public class PlainTextFormatter : IFormatter
{
public Format()
{
...go through and remove all markdown and return rest
}
}
public class Post : IFormattable
{
public IFormatter Formatter { get; set; }
public Post( IFormatter formatter )
{
this.Formatter = formatter ?? new HtmlFormatter();
}
public Format()
{
return this.Formatter.Format();
}
}
这是我要走的路:我将修改 Markdown 代码,以便通过一个开关,我可以生成 html 或简单的文本。摘录生成后,我一定会将其存储在数据库中。
我不会将任何答案标记为解决方案,因为有很多方法可以做到这一点。每个人都得到我的投票;)