亞馬遜AWSSDKforPHP太慢亞馬遜AWSSDKforPHP太慢
您好,
我使用亞馬遜AWSSDKforPHP連接我與S3的Web應用程序。但是,這個過程存在問題,或者向服務提出要求使其過於緩慢。
例如,我有這樣的代碼:
// 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');
}
假設$圖片是用戶圖片的數組,這將返回一個數組名爲$有(正如他的名字一樣)的URL THA圖片的URL憑證5分鐘。此請求在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()」的情況下,腳本需要至少40秒35個圖像!
我已經修改了我的腳本,使用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之間。這是一個很大的區別,但它仍然是一個大量的時間:(。
請,任何幫助這麼多的讚賞。
謝謝。
我不知道的S3 API,但你能不能在桶中要求的文件列表,並執行字符串匹配/腳本搜索自己嗎?在PHP腳本中,34字符串匹配測試不應該花費太長的時間。 – thatidiotguy
我不明白你的迴應: - | – Yefb
我無法更好地解釋它。詢問存儲桶中所有文件的列表。在腳本中自己搜索。完成。無需等待亞馬遜API。 – thatidiotguy