php:优化单个字符串中多个字符串的查找和替换过程

nsc4cvqm  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(419)

我自动链接配置文件在我的博客文本,其中包含配置文件的名称现有的网站。所以我。。。
1) …使用4个单独的查询,从一个数据库中的4个不同的mysql表(包含不同类型的概要文件)中提取约500行(仅?)。
2) …str\u replace()每个配置文件名在blogpost文本中单独使用一个链接,如果该配置文件名存在(之前尝试将它们放入search replace数组中,并执行单个str\u replace()操作)。
当它做它应该做的事情时,它显著地减慢了blogpost概述页面的速度。在overview页面上加载10篇文章,其中每个内容都会根据出现的配置文件名进行检查,加载需要30秒以上的时间。如果没有这个完整的自动链接过程,blogpost概述页面将很快加载。
我相信罪魁祸首是第二步)。如何加快在单个文本字符串中查找和替换大量字符串(来自数据库)的过程?

suzh9iv8

suzh9iv81#

按照@devon和@tadman的建议,现在用户有义务注意链接配置文件。然而,我需要的选项,以链接到配置文件不存在的时候,写文章,但可能会创建以后。现在,用户在写文章时,通过在大括号中包含自己的名字来标记任何现有或未来的个人资料。可以通过执行preg\u replace\u回调并在数据库中搜索大括号内的概要文件名来找到它们。

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);

在我以前的ressource-ansatz中,数据库中有多达5n个str\u-replace调用,因为考虑了配置文件名称的变化。现在,对于post文本中标记的n个概要文件,最多有n到4n个数据库调用,因为可能需要搜索位于单个db表中的4种不同概要文件类型。新方法将blog加载时间缩短到3s左右,比原方法提高了10倍以上。

相关问题