2011-06-22 11 views
5

Per semplificare la mia situazione; Ho 3 pagine PHP. Due di loro aggiungono e rimuovono rispettivamente le righe da un database. Il terzo recupera tutte le righe, le codifica come JSON e stampa il risultato.Perché alcune chiamate AJAX impiegano drasticamente più tempo per terminare rispetto ad altre quando gli URL hanno lo stesso tempo di risposta?

Ho temporizzato l'esecuzione di tutte le pagine, che varia da 0,001 a 0,004 secondi. Qui ci sono i tempi del Ajax chiede tuttavia:

Fetch intera tabella come JSON: 8-12ms
Aggiungi riga: 990-1010ms
Rimuovi riga: 990-1010ms

Il tempo di risposta del componente aggiuntivo e rimuovere i tempi causa inutili rallentamenti nella mia applicazione, considerando che i tempi di esecuzione di PHP sono semplici frazioni di secondi e il loro output è semplicemente "1" per il successo e "0" per il fallimento (Rispetto alla chiamata fetch, che stampa fino a 100 righe (~ 10 colonne) di dati come JSON)

Tutti i miei orari di ritorno Ajax sono misurati in Firebug. Tutte le chiamate Ajax vengono effettuate tramite jQuery ($.ajax()).

Suppongo che questo abbia qualcosa a che fare con Firefox non considerando una richiesta di risposta GET a meno che non abbia ricevuto una quantità particolare di byte o caratteri e il tempo di risposta di 1 secondo sia un timeout di qualche tipo.

Qualche saggezza da condividere sul problema?


ho cronometrato i tempi di caricamento AJAX in Chrome e Opera, nonché (Medie):

Opera:
* Tutte le chiamate AJAX ~ 15 ms

Chrome:
* Rimuovere righe e recupera righe: ~ 25 ms
* Aggiungi riga: ~ 350 ms

La mia applicazione è scattante e reattiva in Opera, ma lenta a in misura diversa in tutti gli altri browser. Esattamente perché non mi è ancora chiaro.


Ho programmato anche IE 9, che si comporta praticamente identicamente a Opera. La mia applicazione ora funziona rapidamente in due browser.

+0

Puoi pubblicare il codice (PHP, HTML, JavaScript e MySQL)? E quanto è grande il database? (numero di righe) –

+0

Ryan Doherty: Temo di non poterlo fare, essendo un progetto proprietario. Ho già riassunto i tempi di esecuzione di PHP nella domanda, che include le query MySQL ed esclude PHP come causa del ritardo di 1 secondo. Qualsiasi frammento di codice particolare che vorresti vedere sono sicuro di poter fornire anche se – Hubro

+0

Hai provato a misurare il tempo di caricamento di ogni pagina quando richiesto direttamente, e non tramite ajax? PHP ha un sovraccarico prima dell'esecuzione dello script (molto di più se stai usando qualche tipo di framework). –

risposta

1

Apparentemente alcuni browser hanno effetti secondari misteriosi dall'uso di localhost anziché da 127.0.0.1 nell'URL. Il secondo di ritardo aggiunto era uno di questi. L'utilizzo di 127.0.0.1 ha risolto il problema per me.

+0

suona come un problema DNS –

+0

Potrebbe ancora essere un problema DNS se agisce in modo diverso nella maggior parte dei browser? – Hubro

+1

È meno probabile, ma ancora possibile dal momento che i browser implementano la propria cache DNS e cose del genere (sto solo dicendo che i browser * non * usano semplicemente 'gethostbyname()') –

0

sarà meglio se si utilizza HTTPWatch. Vi dirà l'ora esatta di tutti i file js e css e il rendering della pagina ecc. In questo modo è possibile analizzare, quale chiamata richiede più tempo e perché. certo che ho risposto alla tua domanda o no, ma spero che tu possa ottenere aiuto da HTTPWatch.

Here si dispone di un buon articolo che vi dirà, come migliorare le prestazioni del sito riducendo al minimo i tempi di richiesta.

-1

non ho informazioni basare questo su, ma la mia ipotesi in questo momento è uno di questi colpevoli:

  • Lento disco (s) - aggiungendo ed eliminando le righe potrebbe richiedere più l'accesso al disco di legge (più MySQL potrebbe fare query nella cache)
  • indici - MySQL deve aggiornare sia gli indici quando una colonna viene modificato o aggiunto

Blocco che si dovrebbe profilo del tuo codice. Usa xdebug e/o esegui le tue query MySQL direttamente tramite MySQL per vedere quanto tempo impiegano.

+0

Nella mia domanda escludo MySQL o PHP come causa del ritardo. Deve essere causato da Apache o Firefox. – Hubro

+0

Come li escludete? Hai testato le tue domande individualmente? Hai profilato il tuo PHP? Hai eseguito le chiamate AJAX senza interrogare il database? –

+0

Ho semplicemente programmato l'esecuzione di PHP per ciascuna delle pagine dall'inizio alla fine – Hubro

Problemi correlati