J'ai un soucis sur un site à gros trafic et j'avoue que je comprends pas tout sur les mises en cache.
Voilà mon problème.
J'utilise une API que j'ai mise en cache et j'utilise aussi WPROCKET et CloudFlare.
Pour afficher le résultat de l'API j'utilise un script PHP et je pense que c'est cette partie qui pose problème.
Exemple de page appelé : mapage.php?param1=test
Là je lance une petit fonction qui va appeler l'API avec un foreach.
De ce que j'ai analysé, l'api est bien en cache car quand je change une info dans la BDD et bien l'info ne change pas en front.
Aussi, j'ai remarqué que si je fais une modif sur le script php, la modif apparait bien et la page est mise en cache, mais côté client, donc si un autre utilisateur charge la page, le script est de nouveau exécuté. Donc avec 200 K visites en une heures, ça fait chaud aux fesses.
Je me demande si c'est ma structure serveur qui est trop légère ou ma mise en cache défaillante. Ou les deux.
Je ne peux pas vous montrer, puisque j'utilise Wp-Rocket. Voici en revanche mon code qui appel l'api.
Mais le test que j'ai fait est le suivant.
Je change les info dans ma base de données > Le texte ne change pas en front. J'en conclu que le cache api marche bien.
J'a un texte sur le script qui récupère les infos API > Là quand j'ouvre mon navigateur le texte apparait. J'enlève le texte > Les infos y sont toujours > Je change de navigateur et le texte n'y est pas.
//affichage horoscop
add_shortcode('horoscope', 'give_horoscope');
function give_horoscope($atts, $choix_signe) {
extract(
shortcode_atts(
array(
'domaine' => 'no domaine',
'type' => 'semaine'
),
$atts
)
);
$choix_signe = do_shortcode($choix_signe);
$choix_domaine=$domaine;
// URL for all appointments (just an example):
if($type=="jour")
{
$url = 'XXXX';
}
elseif($type=="semaine")
{
$url = 'XXXX';
}
elseif($type=="week-end")
{
$url = 'XXXX';
}
// Initiate curl:
// GET request, so no need to worry about setting post vars:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Grab response as string:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// HTTP auth:
curl_setopt($ch, CURLOPT_USERPWD, "$userID:$key");
// Execute request:
$result = curl_exec($ch);
// Don't forget to close the connection!
curl_close($ch);
$prevision = json_decode($result, true);
$nbr=0;
foreach ($prevision as $signe) {
if($prevision[$nbr]['sign']==$choix_signe)
{
$content=$signe[$choix_domaine][0];
break;
}
$nbr++;
}
return $content ;
}
Le cache comme indiqué est géré par un plugin Wordpress.
C'est fonction est appelé à chaque rechargement de page. Je me pose la question de est-ce vraiment possible de faire en sorte que la fonction ne soit pas appelée.
Est-il possible qu'une fonction php soit en cache en gros.
Développeur PHP / Symfony en Freelance
Développeur PHP / Symfony en Freelance