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


Ways to improve Gmail API speed (PHP)

我使用Gmail API的PHP包装器首先获取邮件列表,然后使用其邮件ID获取每个邮件的标题信息,但我一直在经历非常不一致&用它放慢速度。我已经在使用Google的最佳实践页面上所述的部分响应和批处理请求。

下面是我使用的

代码的快照
$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();

大多数第一次get列表调用需要0.7 - 1.2秒

批处理调用大约需要1.7 - 3秒

尽管使用批处理调用并且只从每个邮件中获取'date', 'subject', 'to' header,两个调用的时间仍然可能需要高达~ 4秒,这是非常明显的,并且调用的速度仍然非常不一致。如果不对报头使用部分响应,速度会更慢。

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

谢谢

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

无论你做什么,如果你试图最大化吞吐量,确保你处理好429(速率限制超过)错误