Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mise en cache php

Demande d'info

16 novembre 2018 à 17:47:00

Bonjour,

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. 

Merci pour votre aide.

  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2018 à 1:57:33

Salut,

De ce que je comprends c'estla mise en cache qui est défaillante.

Je vois deux explications possibles :

- soit la mise en cache est lié à la session de l'utilisateur ce qui explique que si un autre utilisateur arrive le script est de nouveau exécuté;

- soit tu mets en cache sur le navigateur et pas coté serveur;

N'hésite pas à nous montrer ton code de mise en cache / récupération depuis le cache pour qu'on puisse t'aider plus

  • Partager sur Facebook
  • Partager sur Twitter

Développeur PHP / Symfony en Freelance

17 novembre 2018 à 10:00:17

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 ;
}



  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2018 à 10:18:46

Le test que tu as fait laisse mes deux hypothèses possibles.

Après je ne vois pas ou tu utilises du cache dans le code que tu as montré.

Avec juste ce code la fonction devrait être appelé à chaque fois donc il faudrait voir dans quel cas cette fonction est appelée.

  • Partager sur Facebook
  • Partager sur Twitter

Développeur PHP / Symfony en Freelance

17 novembre 2018 à 11:05:56

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. 

  • Partager sur Facebook
  • Partager sur Twitter