改进通过 curl 执行的脚本

  • 本文关键字:执行 脚本 curl php cron
  • 更新时间 :
  • 英文 :


我有一个文件,将通过 CRON 调用 30 到 30 分钟,但想要一些改进它的提示,因为他的方式非常慢。

他的逻辑很简单:

  1. 搜索数据库所有状态未就绪的记录

  2. 如果记录存在,它会执行 foreach,对于此类的每个实例,它调用另一个类来执行 curl 来获取 xml,将其转换为 md5 哈希并将哈希与当前数据库进行比较。

  3. 如果哈希不同,它会做其他事情

问题是这个过程非常缓慢,如果有人可以改进这一点?

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . 'setup.php');
$MySQL = new MySQL();
$resultados = $MySQL->query("SELECT * FROM objetos WHERE situacao != 'entregue' AND email = 1")->fetchAll(PDO::FETCH_ASSOC);
if ($resultados) {
    foreach ($resultados as $resultado) {
        $Rastreio = new Correios(new cURL(), $resultado['cod_objeto']);
        if ($Rastreio->resultado['hash'] != $resultado['hash']) {
            $user = $MySQL->query("SELECT  nome, email FROM usuarios WHERE id_usuario = {$resultado['fk_id_usuario']}")->fetch(PDO::FETCH_LAZY);
        // Doing something different
            $MySQL->exec("UPDATE objetos SET situacao = $Rastreio->resultado['status'], hash = {$Rastreio->$resultado['hash']} WHERE cod_objeto = {$resultado['cod_objeto']} AND fk_id_usuario = {$resultado['fk_id_usuario']}");
        }
    }
    } 

所有的答案都很有用。我认为问题出在数据库中,我的查询也没有优化。我会尝试你说的....

这不是一个完整的答案,但我无法评论,所以它必须在这里。

可以实现一些优化:

  • 你真的需要SELECT *吗?对于您需要的字段,它不能更具体吗?
  • 真的需要AND email = 1条件吗?
  • 您是重复使用 cURL 会话还是为每个请求创建一个新会话?
  • 您可以在每次迭代后从$resultadosunset行,以便集更小。
    收益可能很小,但仍然可能有所帮助。
  • 您是否在 cURL 请求中检索不必要的内容?
    就像标题一样,如果你不需要它们。
  • 如果您正在记录 cURL 错误,您是否有权访问该文件?
    您是在追加还是重写?

可能还有其他事情需要考虑,但这些问题应该是首先要检查的事情。

最新更新