Qualunque vantaggio di prestazioni nel copiare la sessione in una variabile?

-1

Ho un buon numero di elementi in una sessione e mi chiedo se ci siano dei vantaggi nel copiare la variabile di sessione in una normale variabile php (per chiudere il file di sessione il più rapidamente possibile) e poi fare qualsiasi chiama da lì. Qualcosa come:

session_start();
$copiedSession = $_SESSION;
session_write_close();
if (isset($copiedSessionData['foo'])){
    ...
}
...
  1. Sto cercando modi per testare le prestazioni su questo.
  2. Ha senso farlo?
  3. C'è un punto di pareggio in cui aiuta / non aiuta?
posta Cymbals 25.03.2013 - 14:58
fonte

2 risposte

2

La mia esperienza di PHP è molto arrugginita, ma nell'esempio che hai fornito, non stai semplicemente creando una variabile di riferimento che punta alla sessione? In altre parole,

$copiedSession = $_SESSION;

non ti dà una "copia" della sessione, ma solo una seconda variabile da cui puoi raggiungerla.

Vuoi una copia profonda.

foreach ($_SESSION as $key => $value)
    $copiedSession[$key] = $value

Penso che sia quello che vuoi.

Per prestazioni migliori, sospetto di no. Dipende se $ _SESSION è un array associativo puro o se è una speciale mappa supportata da file che legge / scrive in tempo reale.

A giudicare dall'interfaccia SessionHandler del manuale PHP, i cui metodi di lettura / scrittura prendono un id di sessione e un array di sessione, sospetto che $ _SESSION sia un semplice vecchio array che proviene da SessionHandler :: read e viene passato a SessionHandler :: write .

Tuttavia, per essere assolutamente sicuro, il modo migliore è semplicemente testarlo.

Potresti fare la lettura e la scrittura in un ciclo dire 10.000 volte contro la variabile $ _SESSION direttamente e misurare il tempo di esecuzione minimo, massimo e medio. Quindi fai la stessa cosa contro una copia (usando il codice che ti ho dato sopra, non il codice puntatore di riferimento) e confronta i numeri.

    
risposta data 25.03.2013 - 16:37
fonte
1

Ha senso farlo quando il tuo motore di archiviazione è il file system e hai più script che accedono agli stessi dati di sessione. (es: chiamate ajax). Il file contenente i dati della sessione verrà bloccato fino a quando il primo script non terminerà l'esecuzione e ciò potrebbe causare problemi di prestazioni. Puoi trovare una spiegazione dettagliata qui

    
risposta data 25.03.2013 - 17:40
fonte

Leggi altre domande sui tag