2012-01-12 22 views
9

Nelle mie precedenti applicazioni Web, quando l'utente ha avuto una transizione da una "pagina" (nessuna ricarica di pagina, solo un nuovo div) a un altro, ho appena nascosto un div per uso futuro e creato + ha mostrato il nuovo. Quando l'utente è tornato dalla gestione degli indirizzi alla gestione degli eventi, ho solo dovuto nascondere il div attuale e mostrare nuovamente quello già utilizzato. Certo, questo ha bisogno di memoria, ma è più veloce.Memoria contro velocità nelle applicazioni Web Javascript

Nella mia nuova applicazione Web, utilizzo Backbone.js, Require.js e jQuery. Tutti i miei moduli sono AMD (jquery 1.7.1, backbone.js 0.5.3-optamd3, ...).

Dopo aver letto i blog interessanti di Derick Bailey (http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/) ora pulisco i miei div prima di passare a una nuova "pagina" e ricrearlo nel caso in cui l'utente ritorni ad esso.

Allo stesso modo, per quanto riguarda i moduli requirejs amd avevo una strategia di velocità su memoria: il cuore della navigazione della mia app Web si trova nel mio unico oggetto router. Se l'utente seleziona una "pagina"/funzione per la prima volta, carico il modulo amd (è un oggetto vista backbone.js) per esso e tutte le sue dipendenze con il comando require e memorizza questo oggetto vista risultante (con il suo oggetto modello) per un uso successivo in un array nell'oggetto router. Quando l'utente torna, prendo l'oggetto vista memorizzato e ri-rendering la vista.

Immagino che passerò da questo comportamento anche a ricaricare sempre il modulo (dalla cache), ma non sono sicuro.

Per andare il modo migliore, voglio avere una migliore comprensione e vuole chiedere 2 domande:

  1. Ho 5 moduli AMD. Quando l'utente ha bisogno di una funzionalità, carico ed eseguo un modulo e come risultato ottengo un oggetto vista backbone.js, che io memorizzo in una matrice nel mio oggetto router. Ogni modulo AMD ha Backbone.js (versione AMD) come dipendenza. Quando l'utente ha visitato tutte le 5 "pagine" e tutti i miei 5 oggetti vista sono archiviati nel mio array, ho 5 copie di backbone.js nella mia memoria del browser poiché ogni dipendenza backbone.js viene prelevata dalla cache ed eseguita nuovamente, oppure ha il garbage collector rimosso?
  2. In che modo altri sviluppatori di applicazioni Web pensano a questa velocità rispetto alla strategia di memoria?

CONTINUAZIONE Oggi ho trovato una domanda simile su StackOverflow (http://stackoverflow.com/questions/7866971/how-does-amd-specifically-requirejs-handle-dependancies-across-multiple-module). La risposta è stata: "Sarà caricato solo una volta, entrambi i moduli sopra indicati avranno lo stesso valore del modulo ...".

Quindi sembra che non sia così male memorizzare i risultati dei moduli amd già caricati + eseguiti per un uso successivo.

Wolfgang

risposta

2

tutto cache (che potrebbe essere usata più di una volta). (scrivi su Canvas/ImageData). Dovresti avere solo una copia del framework in memoria. Se sei preoccupato, c'è di più, riscrivilo per forzare tutti gli AMD a usare un singolo Backbone sorgente.

La memoria è la velocità.

Se si desidera una migliore velocità:

  • esternato i propri file js per il caching del browser.
  • Usa LocalStorage
  • fare la maggior parte di calcolo presso l'utente
  • Minimizzare il server e semplificare il flusso di richiesta
Problemi correlati