2011-11-10 5 views
7

Sto affrontando un problema davvero enorme (almeno per me). Ti darò un po 'di storia.LocalStorage, diverse richieste Ajax o enorme richiesta Ajax?

Sto sviluppando un'applicazione web mobile che mostrerà informazioni sulle stazioni degli autobus e sulle stazioni bici nella mia città. Mostrerà i marcatori GMap per le fermate di autobus e bici e, se clicchi, avrai informazioni sull'orario di arrivo dell'autobus o sul numero di biciclette disponibili. L'ho coperto abbastanza bene.

La parte problematica è il caricamento delle stazioni.

Il mio primo approccio è stato caricare la quantità di stazioni intera al caricamento della pagina. Si tratta di circa 200 Kb di JSON più il tempo necessario per scorrere l'array e inserirlo nella mappa. Sono nascosti in modo che, quando gli utenti fanno clic sul nome della linea, vengano visualizzati utilizzando la funzione 'findMarker'. Se altre stazioni erano presenti sulla mappa, si nascondono per evitare di avere troppi indicatori sulla mappa.

Questo ha funzionato bene con i nuovi cellulari come l'iPhone 4 o il nuovissimo HTC ma non funziona bene con i cellulari di 2 anni.

Il secondo approccio ho pensato, è stato quello di caricarli richiesta, quindi si fa clic sulla stazione, vengono caricati alla mappa, e quindi visualizzati, ma questo porta a due problemi:

  • I il primo è che si può essere (o può essere meno) di eseguire diverse richieste che può finisce lo stesso (?)
  • la seconda è che per evitare avere così molti marcatori, devono essere nascosti o eliminati in modo da essere eliminare le informazioni che dovrebbero essere necessarie di nuovo in un momento, come le stazioni di biciclette che vengono caricati come gruppo e non per linea.

Infine, ho pensato di usare LocalStorage per memorizzarli, in quanto non cambiano più di tanto, ma sarà una quantità enorme di dati e poi, un dolore nel culo per recuperarli in quanto sono fondamentali -valore, e anche (e non ne sono davvero sicuro) potrei trovare dispositivi senza supporto di questa funzione che devono ricorrere a una delle altre opzioni.

Quindi, detto questo, ho pensato che qualcuno potesse trovarsi di fronte a qualche problema simile e averlo risolto in qualche modo o avere qualche consiglio per me :).

Qualsiasi aiuto sarebbe molto apprezzato.

+0

Credo che per un webapp è tutta una questione di velocità e prestazioni, quindi la memorizzazione nella cache tutti i dati statici prima di mano (nel corso di una schermata di caricamento iniziale o qualcosa) IMHO è il modo andare. Questo sarebbe anche optinal per l'utilizzo offline o quando la connessione è cattiva. Il caricamento iniziale potrebbe richiedere più tempo, ma penso che la webapp sarebbe più accattivante. –

+0

Grazie per il tuo commento Phill. Questo pensiero è quello che porta a più confusione. La cpu non sarà più la ricerca e l'aggiunta dall'archiviazione locale rispetto al recupero e all'aggiunta dal server? –

+0

La lettura dall'archivio locale sarà quasi certamente più rapida di una richiesta HTTP, la lettura della risposta e l'analisi dei dati JSON. Tuttavia, penso che utilizzando la memorizzazione nella cache del browser è possibile evitare l'utilizzo di Archiviazione locale, vedere la mia risposta di seguito. – StefanOS

risposta

5

L'approccio migliore dipende dal comportamento degli utenti. In genere fanno clic su molte stazioni o solo su alcune? Preferiscono un avvio più veloce (caricamento su richiesta) o un display dei dettagli delle stazioni più reattivo (dati di precaricamento)?

Un approccio vale la pena indagare potrebbe essere quella di caricare i dati richiesta ma impiegare caching del browser (ETag e scade intestazioni) per evitare il recupero delle stesse informazioni più e più volte. Ciò risolverebbe entrambi i tuoi dubbi senza occuparti di LocalStorage.

Vai a questa a questa domanda per diversi approcci per il caching del browser ETag vs Header Expires

+0

Davvero grazie per la tua risposta StefanO. Il tuo punto sembra essere un ottimo punto di partenza. Anche se ho scoperto che jQuery ha la proprietà ifModified nelle chiamate Ajax per controllare entrambe le intestazioni ETag e Expires, non riesco a trovare alcuna fonte affidabile per implementarle in una risposta JSON da parte di PHP. Hai qualche informazione su thas? –

+0

Non sono un esperto di PHP, quindi non conosco le caratteristiche del framework che potrebbero aiutarlo ad automatizzarlo. Ma queste sono intestazioni HTTP standard in modo da poterle impostare in questo modo: intestazione ('Scade: Ven, 11 Nov 2011 15:00:00 GMT'); intestazione ('ETag: "686897696a7c876b7e"'); – StefanOS

+0

Inoltre, i server Web come Apache e nginx possono essere configurati per impostare automaticamente le intestazioni di cache (ad esempio, memorizzare tutte le pagine per 24 ore). Devi solo preoccuparti del tuo codice con questo se hai bisogno di un maggiore controllo sulla memorizzazione nella cache. – StefanOS