冒着被重定向到this answer的风险(是的,我读了它,花了最后5分钟大声笑出来),请允许我解释这个问题,这个问题只是众多问题中的一个。
我的雇主要求我查看用PHP编写的网站,使用Smarty作为模板,使用MySQL作为DBMS。它目前运行速度非常慢,最多需要2分钟(通过全屏幕,全屏,不少)完全加载。
使用xdebug对代码进行分析,我发现一个preg_replace调用需要大约30秒才能完成,该调用目前通过所有HTML代码并替换找到其SEO友好版本的每个URL。它完成的那一刻,它将所有代码输出到浏览器。 (正如我之前所说,这不是唯一的问题 - 代码相当陈旧,而且它显示了 - 但我会专注于此问题。)
进一步深入研究代码,我发现它目前通过1702个模式查看每个匹配的匹配(同样大小的数组中的匹配和替换),这肯定会占用它所花费的时间。
代码是这样的:
//This is just a call to a MySQL query which gets the relevant SEO-friendly URLs:
$seourls_data = $oSeoShared->getSeourls();
$url_masks = array();
$seourls = array();
foreach ($seourls_data as $seourl_data)
{
if ($seourl_data["url"])
{
$url_masks[] = "/([\"'\>\s]{1})".$site.str_replace("/", "\/", $seourl_data["url"])."([\#|\"'\s]{1})/";
$seourls[] = "$1".MAINSITE_URL.$seourl_data["seourl"]."$2";
}
}
//After filling both $url_masks and $seourls arrays, then the HTML is parsed:
$html_seo = preg_replace($url_masks, $seourls, $html);
//After it completes, $html_seo is simply echo'ed to the browser.
现在,我知道问题的明显答案是:不要用正则表达式解析HTML。但是,如何解决这个特殊问题呢?我的第一次尝试可能是:
但我认为这很可能不是解决问题的正确方法。 有什么想法或建议吗?
感谢。
答案 0 :(得分:0)
由于您的目标是对SEO友好,在目标网页中使用规范标记会告诉搜索引擎使用您的SEO友好网址,因此您不需要在代码中替换它们...
答案 1 :(得分:0)
2-不要做以后必须做的事情,所以修复系统,创建一个数据库迁移,以良好的格式存储SEO网址或使用标题生成它或者什么,在我的系统上我生成SEO这种格式的链接..
www.whatever.com/jobs/722/drupal-php-developer 我使用722作为Id通过解析网址获取正确的页面内容和(drupal-php-developer)是帖子的标题或者什么都
3 - (这不是建议)告诉您的客户项目设计不当(如果您真的相信)并且需要重新构建以提高性能。 运行