2

我是 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);
4

3 回答 3

2

请务必注意优化俱乐部的规则:

  1. 优化俱乐部的第一条规则是,你不要优化。
  2. 优化俱乐部的第二条规则是,你不优化而不测量
  3. 如果您的应用程序运行速度比底层传输协议快,那么优化就结束了。
  4. 一次一个因素。
  5. 没有市场机器人,没有市场机器人时间表。
  6. 只要需要,测试就会继续进行。
  7. 如果这是您在优化俱乐部的第一个晚上,您必须编写一个测试用例。

您需要注意的两个大问题是#2 和#3。

首先,您在没有测量的情况下进行优化。您还不知道该代码块的哪些部分花费的时间最多。为此,您需要一个工具来告诉您,例如 xdebug。如果做不到这一点,请在每个语句之后调用 PHP 的microtime()函数来计算每个语句的执行时间。

似乎提供的大多数答案都为您提供了加速字符串函数的方法,但我敢打赌,调用 SQL 函数和返回行所花费的时间会使这些字符串函数的执行时间相形见绌。例如,如果整个代码运行时间为 1000 毫秒,SQL 调用需要 970 毫秒,字符串函数需要 30 毫秒,那么即使将字符串函数的速度减半,也只能节省 15 毫秒。

假设 SQL 调用是瓶颈,看看你能做些什么来加速它们。SQL 查询是否使用了它应该使用的索引?ID 列是否被索引?

您是否使用了正确的 PHP 函数?是否有一个mysql_*函数可以一次性返回结果中的所有行,而不是访问数据库 15 次?就此而言,函数mysqli_pdo_函数集是否以某种方式更快?这些mysql_功能已正式弃用。(查看大红框并阅读替代方案。)

最后,你需要它跑多快?如果现在运行需要 10 秒,您希望它运行多快?9秒够快吗?或者你需要它在 1 中运行吗?您甚至可能无法获得所需的加速。

tl;dr:在尝试加速代码之前找出慢的部分。

于 2012-09-07T21:32:24.287 回答
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);
于 2012-09-07T21:14:51.543 回答
0

不要优化它;剖析它。

使用诸如XDebug之类的分析器工具来找出代码的哪些部分运行时间最长。一旦您知道代码的哪些部分花费的时间最多,您就可以专注于这些区域。

加速这些特定代码区域的少量工作将比数月修补边缘产生更大的影响。

事实上,除非你在一个流量很大的网站上工作,并且需要节省每一个可能的带宽字节,否则人们称之为“优化”的所有在边缘上的修补可能会产生几乎为零的可识别效果。

简而言之:找出什么是慢的;解决这个问题。不要打扰其余的。

于 2012-09-07T21:59:29.550 回答