Amazon AWSSDKforPHP が遅すぎる
やあ、
Web アプリケーションを S3 に接続するために Amazon AWSSDKforPHP を使用しています。ただし、プロセスまたはサービスへの要求に問題があり、これが遅すぎます。
たとえば、次のコードがあります。
// Iterate an array of user images
foreach($images as $image){
// Return the Bucket URL for this image
$urls[] = $s3->get_object_url($bucket, 'users/'.trim($image).'.jpg', '5 minutes');
}
$images がユーザーの写真の配列であると仮定すると、これは (彼の名前が示すように) 5 分間の資格情報を含む写真の URL を持つ $urls という配列を返します。このリクエストは、35 個の画像で少なくとも 6 秒かかりますが、問題ありません。しかし....バケットに写真が存在しない場合、「images/noimage.png」のようなデフォルトの画像をユーザーに割り当てたいと思います。コードは次のとおりです。
// Iterate an array of user images
foreach($images as $image){
// Check if the object exists in the Bucket
if($s3->if_object_exists($bucket, 'users/'.trim($image).'.jpg')){
// Return the Bucket URL for this image
$urls[] = $s3->get_object_url($bucket, 'users/'.trim($image).'.jpg', '5 minutes');
} else {
// Return the default image
$urls[] = 'http://www.example.com/images/noimage.png';
}
}
そして、条件は機能しますが、SLOOOOOW. 「$s3->if_object_exists()」という条件を使用すると、スクリプトは 35 枚の画像で少なくとも 40 秒かかります!
スクリプトを変更し、cURL を使用してリクエストを作成しました。
// Iterate an array of user images
foreach($images as $image){
// Setup cURL
$ch = curl_init($s3->get_object_url($bucket, 'users/'.trim($image).'.jpg', '1 minutes') );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// Get Just the HTTP response code
$res = curl_getinfo($ch,CURLINFO_HTTP_CODE);
if($res == 200){ //the image exists
$urls[] = $s3->get_object_url($bucket, 'users/'.trim($image).'.jpg', '5 minutes');
}else{ // The response is 403
$urls[] = 'http://www.example.com/images/noimage.png';
}
}
そして、この修正されたスクリプトには 16 ~ 18 秒かかります。これは大きな違いですが、それでもまだ時間がかかります :(.
どうぞ、どんな助けでも大歓迎です。
ありがとうございました。