Quanto AJAX è troppo?

5

Il mio progetto attuale fa parte di un'architettura altamente collegata, con singoli sistemi che possiedono determinati dati e li espongono RESTfully. Sia i nostri servizi Web che la nostra interfaccia utente sfruttano questo collegamento, memorizzando collegamenti alle risorse in altri sistemi anziché memorizzare una copia dei dati e presentando viste composite recuperando lo stato corrente di tali risorse.

Ad esempio, il mio sistema potrebbe essere responsabile di un annuario di persone (non sto utilizzando i nostri dati reali e le relazioni qui, ovviamente). Le persone sono di proprietà di un altro sistema e forse dispongono di informazioni di contatto (indirizzi e-mail, numeri di telefono, maniglie di twitter, ecc.). Tali informazioni di contatto potrebbero essere archiviate in un altro sistema che contiene dettagli sul numero di telefono o sull'indirizzo email.

Per presentare una vista nell'interfaccia utente, devo quindi recuperare i miei dati e seguire i collegamenti per presentare i dettagli appropriati di questi altri sistemi. Potrei memorizzare nella cache alcune parti di queste informazioni ma probabilmente vorrai recuperare i dettagli più recenti.

In alcune delle mie pagine, ho un numero ragionevolmente basso di ricerche per fare questo tipo di arricchimento dei dati. In altre pagine, sto presentando molte più informazioni e finisco con un'esplosione di dati quando ottengo una lista, espandi ogni elemento, espandi ciascuno di questi e così via. Ho provato a fornire un servizio che fa questa aggregazione e restituisce tutti i dati necessari alla vista in un'unica risposta. Tuttavia, non sono sicuro che questo sia il modo più pulito per fornire questo.

Qualcuno può suggerire alcune strategie per determinare quando dovrei usare direttamente le richieste AJAX per recuperare questi dati? A che punto dovrei passare dalle singole richieste a fornire servizi aggregati per costruire i dati? O c'è qualche altra tecnica che potrei applicare?

    
posta CPhelps 08.12.2011 - 01:47
fonte

5 risposte

3

Penso che quante richieste Ajax dovresti eseguire e quando dovrebbero essere fatte dipende davvero dall'interfaccia utente. Quello che penserei prima è qual è l'informazione più importante relativa ai dati che sto caricando. Ad esempio, se si tratta di una persona, direi che il suo nome, cognome, data di compleanno sono ciò che voglio mostrare (o il tipo di informazioni che puoi trovare nella cornice destra di Wikipedia per la visualizzazione delle informazioni personali ). Penso che tu debba visualizzare le informazioni critiche il più velocemente possibile, ma spetta a te (o al tuo cliente) determinare cosa è critico e cosa no.

È quindi possibile utilizzare le richieste Ajax per caricare informazioni più dettagliate (indirizzi? numeri di telefono? maniglie di twitter) che inizialmente non sono disponibili o / e nascosti all'utente, ad esempio in un "tab " non selezionato. La scheda selezionata per impostazione predefinita è quella con le informazioni principali. Hai due modi per farlo:

  • Carica quando la pagina è pronta , cioè quando è stata visualizzata dall'utente. Viene caricato mentre l'utente guarda le informazioni principali.
  • Caricare quando l'utente fa clic sulla scheda. L'utente dovrà attendere un po '(potrebbe essere molto veloce e quasi sconosciuto all'utente).

In ogni caso, adotta la coerenza e assicurati sempre di mostrare la famosa "icona di caricamento" quando i dati non sono ancora disponibili. La seconda scelta potrebbe non essere ottima, ma potrebbe essere utile per le richieste Ajax che richiedono un po 'di tempo, restituiscono molti dati e più di ogni altra cosa è necessario visualizzare un widget complesso. Evita anche chiamate Ajax non necessarie.

Quante richieste Ajax si eseguono (l'aggregazione dei servizi, come hai scritto, significa che si aggregano i dati lato server) è meno importante, secondo me, del tempo totale necessario per ottenere i dati necessari. Se visualizzi le informazioni più velocemente con una richiesta enorme, provaci, altrimenti rimani con diverse piccole richieste / risposte. Devi impostare un obiettivo in termini di caricamento della pagina il più velocemente possibile e provare a raggiungerlo.

In ogni caso, dovrai sperimentare e vedere ciò che dà all'utente la migliore esperienza. So che non è un grande consiglio, ma è quello che cercherò di fare.

    
risposta data 08.12.2011 - 09:13
fonte
2

Ho scoperto che gli sviluppatori che hanno familiarità con i moduli Web ASP .NET e code-behind sostituiscono semplicemente il code-behind con javasctipt e Ajax. Tendono a mettere un Ajax onclick dietro il più piccolo dei controlli utente, che è in effetti un gestore di eventi di controllo server.

Devi capire quali sono le conseguenze di una chiamata Ajax. Ad esempio, se la chiamata sta per dare una chiamata a un WCF / EJB e su un datastore, quella chiamata coprirà 4 limiti del processore (browser, Web Svr, App Layer, DB). Queste chiamate sono costose in termini di latenza implicata nella preparazione dei dati di chiamata e marshalling.

Ajax promuove l'elaborazione remota a grana fine che in realtà è un anti-pattern secondo la facciata di Martin Fowlers Service. Come qualsiasi cosa, Ajax sta bene con moderazione e nel posto giusto. Non penso che il posto sia nel software commerciale.

    
risposta data 16.03.2012 - 10:07
fonte
1

La risposta è "dipende".

  • Le tue richieste di ajax sono gestite contemporaneamente o sono serializzate? La serializzazione può avvenire lato client (limiti di connessione logica o browser) o lato server (ad esempio, serializza PHP richieste se si utilizzano sessioni, per evitare problemi di concorrenza con i dati di sessione).
  • Qual è il tuo caso tipico e il caso peggiore per il tempo di andata e ritorno sul server?

Ho conosciuto situazioni in cui il tempo di andata e ritorno tipico era di un secondo. In questo tipo di situazione, deve aggregare le richieste se altrimenti sarebbero serializzate, poiché ogni richiesta impiega 1 secondo anche se il server risponde in 1 millisecondo. D'altra parte, se le richieste sono altamente concomitanti, a chi importa?

    
risposta data 08.12.2011 - 09:45
fonte
1

Attualmente sto lavorando ad un'applicazione che usa il framework ExtJS e c'è AJAX ovunque. L'avvio di un modulo dell'applicazione e il caricamento di un rapporto causano fino a 30 richieste AJAX.

Una volta che ti sei abituato all'idea che AJAX è una parte normale dello sviluppo del tuo software, devi solo smettere di contare. AJAX non è nulla che deve essere limitato o evitato.

Assicurati di non ottenere le condizioni di gara quando l'elaborazione di una chiamata AJAX dipende dall'uscita sull'altra.

    
risposta data 16.03.2012 - 11:07
fonte
-2

È troppo quando diventa un ostacolo all'usabilità, alle prestazioni, alla manutenzione o allo sviluppo.

    
risposta data 08.12.2011 - 03:40
fonte

Leggi altre domande sui tag