提高Gmail API速度的方法(PHP)

时间:2015-06-08 16:48:51

标签: php performance google-api gmail-api

我正在使用Gmail API的PHP包装器首先获取邮件列表,然后使用其邮件ID获取每个邮件的标题信息,但我遇到了非常不一致的问题。它速度慢。我已经在谷歌的最佳实践页面上使用了部分响应和批量请求等内容。

以下是我使用的代码的快照

$client = new Google_Client();
$service= new Google_Service_Gmail($client);
$batch = new Google_Http_Batch($client);

//Call to get mail list from or to user email, limit to 10 result 
$messages = $service->users_messages->listUsersMessages('me', array('maxResults' => 10, 'q' => "from:$email OR to:$email"));
$messageList = $messages->getMessages();

//enable batch use for client
$client->setUseBatch(true);

//Loop through message list, add get mail request for each message to batch
foreach($messageList as $msg_obj){

    $request = $this->service->users_messages->get('me', $msg_obj->id,array('format' => 'metadata', 'metadataHeaders' => array('date','subject','to')));        
    $batch->add($request, "mail-".$msg_obj->id);

}
//Call batch
$results = $batch->execute();

大多数首次获取列表调用需要0.7 - 1.2秒

批量调用需要大约1.7 - 3秒

尽管使用批量调用并且只从每封邮件中获取'日期','主题','到'标题,但两次调用的时间仍然需要约4秒,这非常明显,并且速度很快通话仍然非常不一致。如果不对标题使用部分响应,则速度会更慢。

Gmail API的速度是否正常,有没有办法让速度进一步降低?

由于

1 个答案:

答案 0 :(得分:0)

可以尝试限制在10以上(尝试20)?使用多个线程绝对是获得最高性能的方法,但显然有一些额外的复杂性(假设1个线程正在执行list()并在队列中抛出msg-id,然后4个线程读取该队列并执行批量get())。

无论您做什么,如果您尝试最大化吞吐量,请确保您能够很好地处理429(超出速率限制)错误。