我是一个新的PHP。你能告诉我优化这个PHP代码以获得最佳性能的最佳方法是什么:
$data = mysql_query("SELECT * FROM wcddl_recents ORDER BY id DESC LIMIT 15");
$searchai = mysql_fetch_array( $data );
while($searchai = mysql_fetch_array($data)) {
$searchai[query] = strip_tags($searchai[query]);
$searchai_clean = str_replace(array("/","\\","'",'"',"<",">","-","+","%","@","%20","(",")",":","[","]","{","}","?","!")," ",$searchai[query]);
$searchai_cleandvigubai = str_replace(" ","-",$searchai_clean);
$searchai_cleandvigubaix = str_replace(array("---","--"),"-",$searchai_cleandvigubai);
$searchai_cleandvigubai2 = strtolower($searchai_cleandvigubaix);
答案 0 :(得分:2)
请务必注意优化俱乐部规则:
你需要注意的两个大问题是#2和#3。
首先,您在不进行测量的情况下进行优化。您还不知道该代码块的哪些部分花费了大量时间。要做到这一点,你需要一个工具来告诉你,比如xdebug。如果做不到这一点,请在每个语句之后调用PHP的microtime()
函数来计算每个语句执行所需的时间。
似乎提供的大部分答案都是为您提供加速字符串函数的方法,但我敢打赌,在调用SQL函数和返回行所花费的时间相比,这些都使这些函数的执行时间相形见绌。字符串函数。例如,如果整个代码运行在1000毫秒,SQL调用需要970毫秒,字符串函数需要30毫秒,那么即使你将字符串函数的速度减半,你也只能节省15毫秒。
假设SQL调用是瓶颈,请参阅您可以采取哪些措施加快速度。 SQL查询是否使用它应该使用的索引? ID列是否已编入索引?
您使用的是正确的PHP函数吗?是否有一个mysql_*
函数会在一个批处理中返回结果中的所有行,而不是按数据库命中15次?就此而言,mysqli_
或pdo_
函数集是否更快? mysql_
函数已正式弃用。 (参见big red box并阅读替代方案。)
最后,你还需要多快的速度?如果现在需要10秒钟运行,您希望它运行多快? 9秒足够快吗?或者你需要它在1中运行?你可能甚至无法获得你正在寻找的那种加速。
tl; dr:在尝试加速代码之前,找出之前的慢速部分。
答案 1 :(得分:0)
这个怎么样?减少变量并有效地使用第一个语句中的strtolower和strip_tags。
您正在用空格替换多个字符,然后用空格替换空格。不妨将两者结合起来。同时从干净的更换中取下仪表板。它被替换为空格然后再次破折号,除非它是Microsoft双破折号,此时您可以在下面的示例中再次添加它。
$searchai[query] = strtolower(strip_tags($searchai[query]));
$searchai_clean = str_replace(array("/","\\","'",'"',"<",">","+","%","@","%20","(",")",":","[","]","{","}","?","!"),"-",$searchai[query]);
$searchai_cleandvigubaix = str_replace(array("---","--"),"-",$searchai_clean);
答案 2 :(得分:0)
不要优化它;简介它。
使用XDebug等分析器工具查找代码的哪些部分需要花费最多的时间才能运行。一旦你知道代码的哪些部分占用了大部分时间,你就可以专注于这些领域。
为加快这些特定代码区域而进行的少量工作将比几个月的修补工作带来更大的影响。
事实上,除非你在一个拥有大量流量的网站上工作并且需要保存每一个可能的带宽字节,否则所有那些人们称之为“优化”的边缘都可能几乎没有可辨别的效果。
简而言之:找出什么是缓慢的;修复它。不要打扰其他人。