0

我在包含配置文件名称的博客文章文本中自动链接存在于我网站上的配置文件。为此,我...

1) ...从 4 个不同的 MySQL 表中提取当前 ~500 行(仅?) - 包含不同类型的配置文件 - 在单个数据库中使用 4 个单独的查询。

2) ...str_replace() 每个配置文件名称单独使用博客文章文本中的链接,如果该配置文件名称存在(尝试将它们放入搜索替换数组之前并执行单个 str_replace())。

虽然它做了它应该做的事情,但它显着减慢了 Blogpost 概览页面的速度。在概述页面上加载 10 个帖子,其中每个内容都会根据配置文件名称的出现进行检查,加载需要 30 多秒。如果没有整个自动链接过程,Blogpost 概览页面会快速加载。

我相信罪魁祸首是第2步)。如何加快在单个文本字符串中查找和替换大量字符串(来自数据库)的过程?

4

1 回答 1

0

按照@Devon 和@tadman 的建议,现在用户有义务处理链接配置文件。但是,我需要链接到在撰写文章时不存在但可能稍后创建的配置文件的选项。用户现在在写帖子时通过在花括号中包含他们的名字来标记任何现有或未来的个人资料。这些是通过执行preg_replace_callback并在数据库中搜索大括号内的配置文件名称来找到的。

private function link_profile($name) {
    // Put your database search(es) here
    // Create link to profile
    return $link_to_profile;
}

$text = preg_replace_callback("/\{(.*)\}/Usi", "link_profile", $text);

在我之前的资源详尽 ansatz 中,数据库中的 N 个配置文件有多达 5N 次str_replace调用,因为考虑了配置文件名称的变体。现在,对于帖子文本中标记的 N 个配置文件,最多有 N 到 4N 次数据库调用,因为可能需要搜索位于各个数据库表中的 4 种不同的配置文件类型。新程序将博客加载时间减少到约 3 秒,与前一种方法相比,改进了 10 倍以上。

于 2018-07-20T10:42:22.170 回答