Du bon usage des tableaux en $_SESSION ?

WRInaute accro
J'ai une petite question pour les spécialistes du truc ...


Voila le code support de ma question :

Code:
<?php
$tab_xref=array();

if (isset($_SESSION['tab_xref']) === false)
{
	$sql_base_table="xref";

	$sql_query = "SELECT * FROM ".$sql_base_table;
	$sql_result_query = mysql_query($sql_query) or die("Load des xref impossible");

	while($sql_row = mysql_fetch_array($sql_result_query))
	{
		$cle=$sql_row['cle'];
 		$tab_xref[$cle] =  $sql_row[datas];
	}
	$nb_requetes++;
	$_SESSION['tab_xref']=$tab_xref;
}
else
{
	$tab_xref=$_SESSION['tab_xref'];
}
?>

En clair, lors de l'affichage de la premiere page de la session, je colle dans un "tableau session" ($_SESSION['tab_xref']) une series d'infos fixes issues de la bdd et comme elles sont fixes, lors des pages suivantes, je ne fais que recupérer le "tableau session" dans un "tableau local" ($tab_xref).

Donc en l'état, je travail ensuite dans mon code avec $tab_xref[$val] pour accéder à l info voulue.

Un truc me titille : est ce une obligation de travailler avec un tableau local ou puis-je travailler directement avec le tableau session ($jelis=$_SESSION['tab_xref'][$val];), ce qui evitera a chaque fois une recopie du tableau session vers le tableau local.

Question connexe : si c'est possible, quid en termes de performances (le tableau session est il plus lent en accès que le tableau local ?).
 
WRInaute accro
est ce une obligation de travailler avec un tableau local ou puis-je travailler directement avec le tableau session
A mon avis c'est la même chose mais c'est simple a vérifier tu fait un :
print_r($_SESSION['tab_xref'])
et un
print_r($tab_xref)
ça devrait renvoyer le même chose ;-)
Après je suis pas certains que la recopie soit une grosse optimisation en terme de temps il n'y a que la mémoire qui risque d'y gagner si c'est de la grosse data (mais bon c'est avec les petites goutes de pluie que les rivières se forment).

le tableau session est il plus lent en accès que le tableau local ?
Si c'est identique et que ça fonctionne, je voie pas en quoi une variable fut elle de session serait moins ou plus accessible qu'une autre ???
En revanche de part sa nature (prise en compte rapide dans le processus apache / php) il y a peut être une chance qu'elle soit mappé plus proche du code dans la mémoire ce qui pourrait faire gagner du temps avec les mouvement de pointeurs mais c'est totalement "utopique" comme remarque. Après on pourrait argumenter que pour les mêmes raisons une variable de session a plus de chance d'être dans les caches de bas niveau mais là encore c'est de la supputation.

Sinon, comme je sais que tu est coutumier de la technique, pour des datas à la con qui ne changent pas tous les jours que je ne souhaite pas chercher en base tous les jours dans des objets j'ai mis en place des fichiers de caches physiques qui font sauter les accès base. Si tu as pas trop de tableaux a mémoriser ça pourrait grandement changer le résultat d'includer un micro script php qui contient tes variables.
 
WRInaute accro
j utilsie aussi assez souvent les caches sur disques (ca allege le bdd mais ca reste un acces physique au disque). La c'est pour allez chercher les derniers pouième de milliseconde ... en mémorisant une partie d ela chose dans des tableau de session ...

Je viens de faire un petit bench et a priori je vois pas de variation mesurable (ou alors faut vraiment boucler en masse et en plus une fois c'est l un une fois l'autre - donc egalité) entre des accès a des $tab ou a des $_session['tab'] ...
 
WRInaute accro
Zecat a dit:
ca allege le bdd mais ca reste un acces physique au disque
ouep un mal pour un bien ou un bien pour un mal ???
La comparaison mémoire / disque ou mémoire / base est sans appel la mémoire sera tjs plus performante c'est certain mais entre un accès base et un accès fichier on peut se poser des questions surtout si tu cherche a gratter des miettes.
C'est super dépendant de l'architecture. tes fichiers peuvent être sur la même machine qui exécute le processus php mais pas forcement, idem la base peut être local ou sur une structure déportée sur le réseau ... Bref faut savoir comment est l'architecture pour commencer a espérer gagner du temps et la solution sera pas forcement la même pour tous.

chez moi sur mes sites j'ai un mode "débug" qui est fait a partir d'une variable de session (bool). si c'est sur "true" le cms fait des traitements amont et aval don notamment des prise de chrono, log de requêtes, .... ça me permet de mesurer en live un changement de code et c'est super pratique. Certes j'utilise pas tous les jours mais quand je gratte la milliseconde c'est important de voir facilement.
 
WRInaute accro
oui c'ets vrai qu'un cluster avec des frontaux, des serveurs de datas et un serveur bdd (avec bdd en ram tant qu'a faire) c'est l'ideal :mrgreen: Mais on a pas tous l'occasion d'en disposer :wink:
 
Discussions similaires
Haut