Bonjour,
le titre n'est pas forcément super explicite donc je m'explique, j'ai un flux serialisé externe qui me retourne des urls vers des images que je veux afficher sur mon site, en raison d'avoir suivi le cours d'optimisation des sites web sur phptv je me suis essayé aux caches...
Ceux qui ont déjà utilisé savent que la mise en cache prend pas mal de temps, mais après ça apporte de bons résultats...
J'aimerai essayer de minimiser ce temps au maximum...
Ce qu'il y a à savoir : le flux se rafraîchit toutes les 2min.
Ce que j'ai mis en place :
- Mise en cache du flux toutes les 2min.
- Mise en cache des images.
Conditions :
- Flux : A chaque appel de page, si le filemtime() du fichier est supérieur à 120 secondes à partir du time() d'appel alors écraser le cache avec la nouvelle version.
- Images : A chaque appel de page, si la dernière date de modification du dossier qui contient les images est supérieur à 120 secondes alors je rentre dans ma 2ème condition qui vérifie si l'image existe déjà et qu'elle est plus vieille que 30 minutes alors la remplacer, ensuite si l'image n'existe pas la créer.
J'ai essayé les manières suivantes et elles sont lourdes...
- Premièrement pour la condition de l'image existante, je vérifiais via file_exists();
- Ensuite comme c'était lent j'ai essayé un Glob(); pour avoir le résultat en tableau.
- De même assez lent mais tout de même plus rapide que file_exists(); à 1ère vue, alors essayé de stocké les infos images dans un fichier .txt sous forme de tableau sérialisé...
- Finalement j'ai l'impression que la lenteur ne viens pas vraiment au niveau de la vérification mais plus au niveau de la copie des fichiers sur mon serveur, donc j'opte pour la fonction copy(); qui à l'air un peu plus rapide mais toujours pas à mon goût.
Pouvez-vous me donner des idées ? Pour augmenter l'efficacité et la rapidité de mon script ?
Voici une partie de mon script :
// CACHE_CONTROL est une constante qui dit si il faut activer le cache ou non.
if(CACHE_CONTROL == true) { $cache = new cache_control(); } // activation object cache_control();
if(CACHE_CONTROL == true) { $update_cache = ($cache->getUpdate('_caches/images/', 120) == true) ? true : false; } // si le dossier /images/ à été modifié il y a plus de 2min. alors true.
if(CACHE_CONTROL == true) { $getUpdate = ($cache->getUpdate('_caches/images/', 1800) == true) ? true : false; } // si le dossier /images/ à été modifié il y a plus de 30min. alors true.
if(CACHE_CONTROL == true) { $filename = '_caches/images/models.txt'; } // Met le chemin vers le fichier où je stock les infos sur mes images dans la variable $filename;
if(CACHE_CONTROL == true) { $file = file_get_contents($filename); } // get_contents du fichier où je stock les infos sur mes images
if(CACHE_CONTROL == true) { $unserialize = unserialize($file); } // désérialise mon fichier où je stock les infos sur mes images
if(CACHE_CONTROL == true) { $update = false; } // Met la variable $update à false par défaut.
foreach($models as $model) { // boucle du flux.
if(CACHE_CONTROL == true) { // si le cache est activé.
$file_cache = '_caches/images/webcams/' . $model['id'] . '.jpg'; // lien vers image qui est censée être en cache
if($update_cache == true) { // si /images/ à été modifié il y a plus de 2min.
if(array_key_exists($model['id'], $unserialize)) { // si image existe dans le fichier sérialisé.
if($getUpdate == true) { // si image existante a été modifié il y a plus de 30min.
echo (copy($model['medias']['preview'], $file_cache)) ? "copie ok" : "copie échouée"; // copie et retourne si la copie à été un succès ou non.
$unserialize [$model['id']]= time(); // met à jour l'entrée dans le fichier sérialisé.
$update = true; // met update à true.
}
} else { // Si image n'existe pas
echo (copy($model['medias']['preview'], $file_cache)) ? "copie ok" : "copie échouée"; // copie image sur serveur
$unserialize [$model['id']]= time(); // ajoute les infos images dans fichier sérialisé.
$update = true; // met update à true.
}
}
}
if(CACHE_CONTROL == true && $update == true) { file_put_contents($filename, serialize($unserialize)); } // met à jour le fichier sérialisé avec les nouvelles entrées si il y a.
J'espère que je ne suis pas trop flou avec vous, si vous avez des questions j'y répondrai :)
Webmaster - Référenceur - Programmeur - GraphisteConfiguration: Carte graphique : Nvidia GeForce 6800 Serie GPU
Carte mère : ASUS P5AD2-E Premium
Processeur : Intel P4 3.4Ghz
Ram : DDR2 3200mo
Disque dur : MAXTOR 250Go 7200 RPM