PHP IMAP连接速度(PHP IMAP connection speed)

2019-10-19 20:20发布

这是我在PHP IMAP先性实验。

我想提出一个面板为我公司,我在那里上传clientes,用姓名和电子邮件,并asignit给用户,

所以当用户进入面板有一个客户那里,面板检查用户的电子邮件帐户和搜索来自客户端的电子邮件邮件,

我的问题是,我第一次加载它变得非常慢的面板,它需要5秒到15秒加载(或以上有时),但第一次加载后,它的速度很快,但如果我走了,让我们说10分钟并重新加载它变得缓慢再次首次面板。

这是我的代码; 在面板中的每个用户我调用这个函数:

function mostrarCorreosRelacionados($remitente){
$hostname = '{localhost:143}INBOX';
$correo = explode("|||",$_SESSION['correo']);
$username = $correo[0];
$password = $correo[1];

/* Intento de conexión */
$inbox = imap_open($hostname,$username,$password) or die('No se pudo conectar con: usuario: '.$username.' y clave: '.$password.' ' . imap_last_error());

/* Recuperamos los emails */
$emails = imap_search($inbox,'FROM "'.$remitente.'"');


/* Si obtenemos los emails, accedemos uno a uno... */
if($emails) {

    /* variable de salida */
    $output = '';

    /* Colocamos los nuevos emails arriba */
    rsort($emails);

    /* por cada email... */
    $ii=0;
    foreach($emails as $email_number) {

        /* Obtenemos la información específica para este email */
        $overview = imap_fetch_overview($inbox,$email_number,0);
        //$body = imap_fetchbody($inbox,$email_number,4);

        $uid = imap_uid($inbox, $email_number);

        $header = imap_header($inbox,$email_number);
        $fromInfo = $header->from[0];
        $replyInfo = $header->reply_to[0];


        $details = array(
            "fromAddr" => (isset($fromInfo->mailbox) && isset($fromInfo->host))
                ? $fromInfo->mailbox . "@" . $fromInfo->host : "",
            "fromName" => (isset($fromInfo->personal))
                ? $fromInfo->personal : "",
            "replyAddr" => (isset($replyInfo->mailbox) && isset($replyInfo->host))
                ? $replyInfo->mailbox . "@" . $replyInfo->host : "",
            "replyName" => (isset($replyTo->personal))
                ? $replyto->personal : "",
            "subject" => (isset($header->subject))
                ? $header->subject : "",
            "udate" => (isset($header->udate))
                ? $header->udate : ""
        );

        //$message = mail_mime_to_array($inbox,$email_number);



        /* Mostramos la información de la cabecera del email */

        $output.= '<li>';

        $output.= '<div class="encabezadoMail '.($overview[0]->seen ? 'read' : 'unread').'">';

        $output.= '<span class="subject">Asunto: '.decodificarTexto($details["subject"]).'</span><br />';

        $output.= '<a href="mailto:'.$fromInfo->mailbox.'@'.$fromInfo->host.'" class="from" title="'.$fromInfo->mailbox.'@'.$fromInfo->host.'">'.decodificarTexto($fromInfo->personal).'</a><br />';

        $output.= '<span class="textoChico">'.$overview[0]->date.'</span>';

        $output.= '</div>';



        /* Mostramos el mensaje del email */

        $output.= '<div class="cuerpoMail" id="msg_'.$i.'" style="display:none;">'.utf8_encode(getBody($uid,$inbox)).'</div>';

        $output.= '</li>';




        $ii++;
    }



    print '<ul class="emails"><li class="encabezadoMail"><strong>E-mails</strong></li>'.$output.'</ul>';

} 



/* Cerramos la connexión */

imap_close($inbox);
}

在imap_open我曾尝试本地主机,域名和IP,但一切似乎工作相同。

有任何想法吗???

更新到MONKEYZEUS

我做了什么,你告诉我,这里是我得到了什么:

FIST CLIENT

连接:0.0309870243073秒恢复:26.7151398659秒

第二个客户端

连接:0.102792978287秒恢复:0.0511429309845秒

第三客户端

连接:0.00676202774048秒恢复:0.0503911972046秒

它只是发生在第一时间,如果我按F5在很长一段时间我的第一个客户端上有不happends,它加载速度快如别人,如果我等待10分钟,它在第一个客户端再次变得缓慢

Answer 1:

你必须弄清楚什么是时间最长。

我想这是这个部分:

/* Intento de conexión */
$inbox = imap_open($hostname,$username,$password) or die('No se pudo conectar con: usuario: '.$username.' y clave: '.$password.' ' . imap_last_error());

/* Recuperamos los emails */
$emails = imap_search($inbox,'FROM "'.$remitente.'"');

因此,尝试标杆吧:

$start = microtime(true); // start timer

/* Intento de conexión */
$inbox = imap_open($hostname,$username,$password) or die('No se pudo conectar con: usuario: '.$username.' y clave: '.$password.' ' . imap_last_error());

echo 'conexión: '.(microtime(true)-$start).' seconds<br>'; // show results

// ---------------------------------------------------------------------

$start = microtime(true); // start timer again

/* Recuperamos los emails */
$emails = imap_search($inbox,'FROM "'.$remitente.'"');

echo 'Recuperamos: '.(microtime(true)-$start).' seconds<br>'; // show new results

conexión可能是最慢的部分。 这可能是因为您的邮件服务器。

UPDATE

根据您的基准很显然, imap_search()是最慢的部分。

这是因为它正在执行数据库搜索和你有这些可能出现的问题:

  • 您的邮件服务器的硬件是非常弱
  • 您的邮件服务器有数据/电子邮件的千兆字节的100的这样的查询自然减慢
  • 您在邮件服务器上运行的硬盘空间

它跑得快的原因,第二次是因为这样的查询结果加载到内存(RAM),但10分钟后高速缓存或者由数据库清除或发生这样的查询的数据变化的数据库进行一些所谓的缓存需要重新缓存。



文章来源: PHP IMAP connection speed
标签: php imap