Я делаю сайт Google App Engine на PHP и обнаружил, что запрос изображений из сервиса Google Cloud делает загрузку страницы чрезвычайно медленной.
Без загрузки изображений загрузка страницы занимает около 0,5 с, а с изображениями — 10–15 с. Я предполагаю, что я делаю что-то не так, поэтому любая помощь будет высоко ценится.
Мой код
require_once "google/appengine/api/cloud_storage/CloudStorageTools.php";
use google\appengine\api\cloud_storage\CloudStorageTools;
...
function cloudStorageUrl($url, $size, $crop) {
if (file_exists($url)) {
$object_image_url = CloudStorageTools::getImageServingUrl($object_image_file, ['size' => $size, 'crop' => $crop]);
return $object_image_url;
}
else {
return false;
}
}
По предложению Павла & Стюарт Я решил эту проблему, создав таблицу в Google Cloud SQL, где я мог хранить URL-адрес, возвращенный из Google Cloud Storage, чтобы мне не приходилось повторно запрашивать URL-адрес.
Пример кода
// Cloud Storage URL function
function cloudStorageUrl($url, $size, $crop) {
if (file_exists($url)) {
$object_image_url = CloudStorageTools::getImageServingUrl($object_image_file, ['size' => $size, 'crop' => $crop]);
return $object_image_url;
} else {
return 'none';
}
}
// Connect to database
$db = new pdo('mysql:unix_socket=/cloudsql/<your-project-id>:<your-instance-name>;dbname=guestbook', 'root', '');
foreach($db->query('SELECT * FROM `images` WHERE `id`="'.$id.'"') as $row) {
// Check if Cloud Storage URL already exists
if ($row['url'] && $row['url'] !== 'none') {
$url = $row['url'];
} else {
// Get the Cloud Storage URL and save it
$url = cloudStorageUrl($row['cloud_storage_location'], 400, false);
$stmt = $db->prepare('INSERT INTO `images` (id, url) VALUES (:id, :url ON DUPLICATE KEY UPDATE url=VALUES(url))');
$stmt->execute(array(':id' => intval($id), ':url' => htmlspecialchars($url)));
}
}
Других решений пока нет …