Buonasera, sto sviluppando un sito web che fa uso massiccio di Ajax con PHP che legge dal database e invia la struttura dei file in xml.
Un utente del mio sito, usando una vecchia versione di safari, quando naviga crea un rallentamento di comunicazione con il database.
Praticamente quando smette di navigare, dopo pochi minuti tutto torna a funzionare velocemente, ma quando lui è sul sito, le richieste javascript ci mettono anche 30 secondi per essere portate a termine, e accedere al database mysql da parte mia ci mette tempi biblici.
L'idea che mi sono fatto (ma è pura supposizione perché non sono granché esperto) è che quando chiama i file php per generare l'xml, questi vadano in errore oppure vanno in stallo sulla richiesta SQL, e le richieste al database si saturano.
Avete qualche altra idea?
Grazie in anticipo
Il mio codice php ha questa struttura:
Un utente del mio sito, usando una vecchia versione di safari, quando naviga crea un rallentamento di comunicazione con il database.
Praticamente quando smette di navigare, dopo pochi minuti tutto torna a funzionare velocemente, ma quando lui è sul sito, le richieste javascript ci mettono anche 30 secondi per essere portate a termine, e accedere al database mysql da parte mia ci mette tempi biblici.
L'idea che mi sono fatto (ma è pura supposizione perché non sono granché esperto) è che quando chiama i file php per generare l'xml, questi vadano in errore oppure vanno in stallo sulla richiesta SQL, e le richieste al database si saturano.
Avete qualche altra idea?
Grazie in anticipo
Il mio codice php ha questa struttura:
PHP:
require 'config.php';
session_start();
//Inizializzo il documento XML
$testata = <<< codeString
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
codeString;
header('Content-Type: text/xml');
echo $testata;
//Inizializzo le stringhe dei messaggi
$codiceXml = "";
$codiceErrore ="";
$is_error=false;
// Creo l'oggetto mydb
$mydb = new mysqli($db_server, $db_user, $db_password, $db_name);
// Se non è possibile connettersi genero un xml di errore
if (mysqli_connect_errno()) {
$codiceErrore.="<errore>";
$codiceErrore.="<messaggio>".htmlentities("Errore di connessione: il database non è disponibile, riprovare più tardi")."</messaggio>";
$codiceErrore.="</errore>";
$codiceErrore.="</response>";
echo $codiceErrore;
exit();
}
// Se non è presente il parametro get, genero xml di errore
if(!isset($_GET['cat'])){
$codiceErrore.="<errore>";
$codiceErrore.= "<messaggio>Errore: la categoria selezionata non esiste, contattare l'amministratore</messaggio>";
$codiceErrore.="</errore>";
$codiceErrore.="</response>";
echo $codiceErrore;
$mydb->close();
exit();
}
$id_cat = $_GET['cat'];
$sql_categoria = "SELECT * FROM categorie WHERE id_categoria=$id_cat";
$sql_prodotti="SELECT * FROM prodotti WHERE id_categoria=$id_cat";
$result = $mydb->query($sql_categoria);
if(!isset($result)||is_null($result)||!is_object($result)){
$codiceErrore.="<errore>";
$codiceErrore.="<messaggio>".htmlentities("Errore nel database: query sql_categoria non riuscita, contatare l'amministratore")."</messaggio>";
$codiceErrore.="</errore>";
echo $codiceErrore;
$codiceErrore = "";
$is_error = true;
}else{
$result = $result->fetch_assoc();
$codiceXml.="<categoria>";
$codiceXml.="<nome>".$result['nome']."</nome>";
$codiceXml.="<descrizione>".htmlentities($result['descrizione'])."</descrizione>";
$codiceXml.="<immagine>".$result['immagine']."</immagine>";
$codiceXml.="<colore1>".$result['colore1']."</colore1>";
$codiceXml.="<colore2>".$result['colore2']."</colore2>";
$codiceXml.="</categoria>";
}
if(isset($_SESSION['livello'])|| !empty($_SESSION['livello'])){
if($_SESSION['livello']!= 1){
$codiceXml.="<livello>2</livello>";
}
else{
$codiceXml.="<livello>1</livello>";
}
}
else{
$codiceXml.="<livello>1</livello>";
}
$result = $mydb->query($sql_prodotti);
// Se il risultato non è valido genero un messaggio di errore
if(!isset($result)||is_null($result)||!is_object($result)){
$codiceErrore.="<errore>";
$codiceErrore.="<messaggio>".htmlentities("Errore nel database: query sql_prodotti non riuscita, contatare l'amministratore")."</messaggio>";
$codiceErrore.="</errore>";
echo $codiceErrore;
$codiceErrore = "";
$is_error = true;
}else{
while($row = $result->fetch_assoc()){
// Genero un xml con tutti i dati del prodotto
$codiceXml.="<prodotto>";
$codiceXml.="<id_prodotto>".$row['id_prodotto']."</id_prodotto>";
$codiceXml.="<titolo>".htmlentities($row['titolo'])."</titolo>";
$codiceXml.="<sottotitolo>".htmlentities($row['sottotitolo'])."</sottotitolo>";
$codiceXml.="<descrizione>".htmlentities($row['descrizione'])."</descrizione>";
$codiceXml.="<immagine>".$row['immagine']."</immagine>";
$codiceXml.="<colore1>".$row['colore1']."</colore1>";
$codiceXml.="<colore2>".$row['colore2']."</colore2>";
$codiceXml.="<q_riv>".$row['q_riv']."</q_riv>";
$codiceXml.="<q_cab>".$row['q_cab']."</q_cab>";
if(isset($_SESSION['livello'])|| !empty($_SESSION['livello'])){
if($_SESSION['livello']!= 1){
$codiceXml.="<riv>".$row['prezzo_riv']."</riv>";
$codiceXml.="<cab>".$row['prezzo_cab']."</cab>";
}
}
$codiceXml.="</prodotto>";
}
}
// SE NON SONO AVVENUTI ERRORI STAMPO IL CONTENUTO CORRETTO
if(!$is_error){
echo $codiceXml;
}
echo "</response>";
$mydb->close();
?>