Risposta Ajax più lenta

0

La logica di visualizzazione all'interno del controller aumenta la velocità di caricamento della pagina? Perché ho un'azione di controller che chiama una vista che sto caricando attraverso ajax e sto ottenendo una risposta molto lenta. Perché sta succedendo?

Mette la logica della vista all'interno del controller come ...

echo "<div>View echoed</div>"

un buon modo per codificare? questo aumenta l'efficienza?

Ho scritto un'azione del controllore come

class Ajax extends CI_Controller{ 
  foo ($id){
   $data = $this->model->get_data();//has joins in query
   $this->load->view($data);
 }
}

In vista,

Ho usato due cicli foreach annidati per ottenere una tabella con circa 100 righe

e carico la vista attraverso una richiesta jquery ajax all'url ajax / foo / 1

La mia domanda è chiaramente se sia una buona pratica mettere la logica della vista nel controller per le chiamate ajax? aumenterà la velocità di caricamento della mia pagina.

Sono nuovo nel codificare le cose in modo molto professionale. È un metodo valido e professionale o qualsiasi altra alternativa disponibile.

    
posta Mohammed Ashiq 23.12.2013 - 08:32
fonte

1 risposta

2

Fare una pugnalata a questo per quello che è stato chiesto, piuttosto che provare a cambiare direzione: -)

No

ma poi di nuovo molte persone non saranno d'accordo con me.

Se c'è UNA cosa che ho imparato nel corso degli anni, è questa ...

"I design pattern, come MVC e altri non sono una religione, sono lì per servire come indicazioni su come le cose hanno funzionato bene in passato, e come si potrebbe desiderare di applicarle in futuro."

Non ci sono, né dovrebbero mai esserlo, un libro delle regole dedicato che afferma che questo è come DEVI fare questo progetto, o come DEVI fare progetti di tipo X.

L'utilizzo di una risposta basata su AJAX è progettato per consentire il caricamento della pagina, quindi per consentire alle altre parti di raggiungerlo mentre lo fa.

Se ci pensi per un momento. Cosa faresti, se avete visto una pagina bianca vuota che ha preso le età a carico, rispetto a quello che si potrebbe fare se avete visto una pagina con un certo carico di contenuti quindi attendere mentre caricato altre sub-contenuti, specialmente se detto pagina aveva una specie di "Caricamento dei dati per favore aspetta ..." messaggio su di esso.

Guardando la tua descrizione, sarei molto fiducioso che il tuo rallentamento sia effettivamente nel tuo codice di database, specialmente se dici che stai facendo molti join e cose del genere.

È molto facile determinarlo, basta cambiare il codice del tuo modello in qualcosa di temporaneo che restituisca forse 10 semplici righe senza join o altro, e guarda cosa succede.

Ajax chiede per loro stessa natura non sono poi così speciale, non sono diversi per chiamate normali a un server web in termini di fare una richiesta HTTP, cioè, è ancora lo stesso server, è ancora la stessa connessione di rete e ha sempre la stessa latenza.

Meteo o non hai messo la logica della vista nel tuo controller o no dipende interamente da te, personalmente non ho alcun problema con esso, ma la logica della vista è tutto ciò che inserirò, l'opinione degli altri varierà.

Per quanto riguarda l'accelerazione dell'accesso al tuo database, beh ci sono molte cose che puoi fare, ma dal momento che non so nulla del tuo progetto non posso davvero dirti qual è l'idea migliore, tutto ciò che posso fare è darti alcuni suggerimenti.

Alcune cose che puoi provare:

Riduci i tuoi guadagni ... i join sono un killer delle prestazioni nella maggior parte dei casi, specialmente se stai usando qualcosa come codeigner per generarli. Invece quello che si potrebbe desiderare di fare è guardare utilizzando una stored procedure nel database, o meglio ancora utilizzare al fine di appiattire le righe in un unico DTO poi da PHP tutto ciò che dovete preoccupare è che il modello piatto, se il vostro scricchiolio di un MOLTO di dati, quindi prova a fare in modo che il database faccia il maggior carico possibile per te, questo è ciò per cui è stato progettato.

Utilizza un server database più veloce, sia software che le specifiche della macchina attuale, se puoi ...

Usa caching ... se il tuo non cambiano i dati critici, e si può permettere per il vostro web interfaccia utente per essere a pochi secondi di distacco è scrive, quindi utilizzare memcache o qualche altra soluzione di caching, anche se in cache solo per pochi secondi , su un server occupato che può fare una grande differenza.

Cerca di rendere il tuo database chiamante asincrono, ovvero spara la richiesta al database, poi invece di aspettare che risponda a te, torna a fare altre cose e imposta una sorta di richiamo in modo che il database ti dice quando è pronto. ambienti come NodeJS e F # eccellono in questo tipo di modello operativo, in modo tale da non dover attendere sempre operazioni I / O.

Non posso dirti al 100% come risolvere questo problema, poiché ci sono troppe incognite, ma il consiglio che ho dato dovrebbe sperare di farti pensare a diversi approcci e punti di vista da esplorare.

    
risposta data 23.12.2013 - 12:03
fonte

Leggi altre domande sui tag