我有一个带搜索功能的网站,但我想查看列入黑名单的关键字的搜索字词
问题是列表太大了,现在网站加载速度很慢(3-5s第一个字节),CPU负载很高。 该列表中有45.000行(~1.5 mb)
我试图拆分几个较小的文件,但它仍然很慢
黑名单功能适用于每次搜索 你可以在下面看到
function CheckForBlockedWords(){
$blackList=array();
$string1 = trim(strtolower(str_replace("_"," ",$_GET['search'])));
$string1 = preg_replace('/-+/', ' ',$string1);
$string1 = preg_replace('/\s+/', ' ',$string1);
$string1 = trim($string1);
foreach (glob("/home/keywords2/*") as $file) {
$blackList = file($file);
foreach($blackList as $word)
{
$string2 = trim(strtolower(str_replace("_"," ",$word)));
$string2 = str_replace("-"," ",$string2);
//$string2 = preg_replace('/-+/', ' ',$string2);
$string2 = preg_replace('/\s+/', ' ',$string2);
$string2 = trim($string2);
if(strpos($string1, $string2) !== false )
{
echo "<div class='blockedSearch'>What you are searching is blocked!</div>";
return true;
}
}
}
return false;
}
以任何方式更快地完成这项工作?
答案 0 :(得分:0)
文件系统很慢。数据库很快,因为它们具有索引并可以缓存查询。因此,如果用户键入的关键字列在那里,您最好设置一个小表并在该表中搜索。这比从磁盘读取文件和循环遍历它们要快得多。