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

Ran*_*ter 6 php performance google-api gmail-api

我正在使用 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();
Run Code Online (Sandbox Code Playgroud)

大多数第一个 get list 调用需要 0.7 - 1.2 秒

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

尽管使用批量调用并且只从每封邮件中获取'date'、'subject'、'to' header,但两次调用的时间仍然可以达到~4 秒,这是非常明显的,并且调用的速度仍然很不一致。没有在头部使用部分响应,速度甚至更慢。

Gmail API 的速度是否正常,有什么方法可以进一步降低速度?

谢谢

Eri*_*c D 0

可以尝试将限制设置为 10 以上(尝试使用 20)吗?使用多个线程绝对是获得最高性能的方法,但显然存在一些额外的复杂性(假设 1 个线程执行 list() 并将 msg-ids 放入队列中,然后 4 个线程读取该队列并执行批处理 get() )。

无论您做什么,如果您想最大化吞吐量,请确保妥善处理 429(超出速率限制)错误。