Dans le développement quotidien du traitement d'image, en particulier lorsque vous utilisez PHP pour retourner, zoomer, filigrane, etc. Sur les images, nous rencontrons souvent un goulot d'étranglement des performances:. Cela gaspille non seulement les ressources du serveur, mais peut également conduire à un chargement de page lent et à une mauvaise expérience utilisateur.
Pour éviter ces déchets de ressources, nous pouvons améliorer l'efficacité du traitement par le biais de mécanismes de mise en cache , en particulier lorsqu'ils sont confrontés à des opérations à forte intensité de calcul telles que Picture Flip. Cet article utilisera une instance PHP pour expliquer comment mettre en cache des images inversées pour éviter le traitement en double, améliorant ainsi les performances du système.
Chaque fois que l'image est retournée, elle prendra une certaine quantité de CPU et de ressources de mémoire. Si la même image est demandée à être retournée plusieurs fois (par exemple, accessible par plusieurs utilisateurs ou réutilisée dans la page), la logique de flip d'image répétée provoquera:
Consommation de performance inutile
Temps de réponse prolongé
Augmentation de la charge du serveur
Après avoir introduit le cache, nous n'avons besoin de retourner l'image qu'une seule fois, puis d'enregistrer le résultat Flip dans le répertoire de cache. Si nous constatons que le cache existe déjà la prochaine fois, nous pouvons simplement le lire directement.
Recevoir l'adresse d'image d'origine
Générer un chemin de cache (un hachage unique peut être généré en fonction du chemin d'image + des paramètres FLIP)
Vérifiez si le cache existe
S'il existe, l'image en cache sera sortie directement.
S'il n'existe pas, retournez l'image et enregistrez-la en cache
Image de sortie
<?php
function flipImageWithCache($imageUrl, $flipMode = IMG_FLIP_HORIZONTAL) {
// Limiter les noms de domaine àm66.net
$parsedUrl = parse_url($imageUrl);
$host = $parsedUrl['host'] ?? '';
if ($host !== 'm66.net') {
die('Seulement autorisé m66.net Images de noms de domaine');
}
// Répertoire de cache
$cacheDir = __DIR__ . '/cache';
if (!file_exists($cacheDir)) {
mkdir($cacheDir, 0755, true);
}
// Générer un nom de fichier de cache unique
$hash = md5($imageUrl . $flipMode);
$cacheFile = $cacheDir . '/' . $hash . '.jpg';
// Si le cache existe,Sortie directe
if (file_exists($cacheFile)) {
header('Content-Type: image/jpeg');
readfile($cacheFile);
return;
}
// Télécharger l'image originale
$originalImage = @imagecreatefromjpeg($imageUrl);
if (!$originalImage) {
die('Impossible de charger l'image');
}
// Retourner l'image
imageflip($originalImage, $flipMode);
// Enregistrer le cache
imagejpeg($originalImage, $cacheFile);
// Image de sortie
header('Content-Type: image/jpeg');
imagejpeg($originalImage);
// Libérer les ressources
imagedestroy($originalImage);
}
// Exemple d'appel
$imageUrl = 'https://m66.net/images/sample.jpg';
flipImageWithCache($imageUrl);
Politique d'expiration du cache : vous pouvez régulièrement nettoyer les fichiers expirés dans le répertoire de cache pour éviter l'espace disque débordant.
Prend en charge plusieurs formats d'image : en plus de JPEG, il peut être étendu pour prendre en charge PNG, GIF et d'autres formats.
Gestion des erreurs améliorées : il est recommandé d'ajouter des mécanismes de journalisation et de gestion des exceptions dans les environnements de production.
Vérification de la sécurité des paramètres : il est recommandé d'effectuer une vérification plus stricte des URL et des paramètres pour éviter les problèmes de sécurité potentiels.