【问题标题】:How do I speed up PHP Array / List functions?如何加速 PHP 数组/列表函数?
【发布时间】:2018-08-07 12:54:40
【问题描述】:

我正在用 PHP 从 MySQL 数据库中读取一个表。我使用 fetch_assoc() 一次获取一行结果。我发现虽然获取速度很快,但将数组解析为变量(使用 list() 函数或索引数组)确实很慢,即使使用 SplFixedArray。以下是包含一些计时指标的代码:

$stupid = new SplFixedArray(15);
while ($row = $result->fetch_assoc()) {

  $time_post = microtime(true);
  $exec_time = $time_post - $time_pre;
  $time_pre = $time_post;
  echo (' Row Fetch: ' . $exec_time . '<br><br>');

  $stupid = $row;

  list ($category, $entity, $link, $channel, $text_date, $description, $tempe, $printo, $web, $watchlisten,
    $location, $title, $by, $page, $eventdate) = $stupid;
  echo "<br><br>";

  $time_post = microtime(true);
  $exec_time = $time_post - $time_pre;
  $time_pre = $time_post;
  echo (' List parsing: ' . $exec_time . '<br><br>');
}

这会产生以下输出:

行获取:0.013195037841797

列表解析:0.024664163589478

行获取:1.5974044799805E-5

列表解析:0.016013860702515

行获取:1.5020370483398E-5

列表解析:0.017437934875488

行获取:1.9073486328125E-5

列表解析:0.019788026809692

等等

所以每行获取(在第一行之后)都非常快。但是每次我将数组解析为变量时,速度都很慢,尤其是因为我要处理数千条记录。

关于如何加快速度有什么建议吗?

【问题讨论】:

  • 你为什么要做list()
  • 将数组解析为变量(使用 list() 函数我猜完全没有必要。这些值已经在数组中,所以从那里使用它们!这样就省去了所有耗时的代码部分
  • 一次获取所有行,或者将其限制为 200 行,然后全部获取,然后在获取后迭代它们。 php.net/manual/en/pdostatement.fetchall.php
  • 您确定您计算的执行时间正确吗?看起来非常复杂且容易出错……=_=
  • 我的另一个猜测是你正在做list(),因为你正在做SELECT *,如果是这样的话,将选择更改为只选择你想要的,这也会加快获取速度也不需要list()

标签: php arrays parsing


【解决方案1】:

我不确定为什么会这样,但它可以将事情加速到几乎瞬间:

  $everything = implode("|", $row);

  list ($category, $entity, $link, $channel, $text_date, $description, $tempe, 
  $printo, $web, $watchlisten, $location, $title, $by, $page, $eventdate) = 
            explode("|", $everything);

我的猜测是数组 $row 包含混合类型的元素,并且通过它们进行解析会导致系统陷入困境。一旦所有内容都转换为字符串然后放回数组中,分配数组元素就很容易了。或者至少这是我的猜测。

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2010-11-28
    • 2015-04-02
    相关资源
    最近更新 更多