2010-04-26 9 views
5

Ho una semplice porzione di dati che sto memorizzando su un server, come una stringa semplice. E 'sorta di ridicolo, ma sembra che questo:Creazione e analisi di stringhe enormi con javascript?

name|date|grade|description|name|date|grade|description|repeat for a long time 

questa stringa può essere fino a 1,4 MB di dimensione. L'idea è che si tratta di un mucchio di record di studenti, appena messi insieme con un semplice delimitatore di tubi. È un metodo di serializzazione molto scarso.

Una volta che questa stringa enorme viene trasferita al client, viene nuovamente suddivisa lungo i tubi nei record degli studenti, utilizzando javascript.

Ho calcolato il tempo necessario per creare e dividere queste stringhe sul lato client. I tempi sono in realtà abbastanza buoni, la corsa più lenta che ho visto su poche macchine diverse è di 0,2 secondi per 10.000 "record degli studenti", che ha una dimensione finale della stringa di ~ 1,4 mb.

Mi rendo conto che è abbastanza bizzarro, mi chiedo solo se ci sono problemi inerenti alla creazione e alla suddivisione di stringhe così grandi usando javascript? Non so in che modo i diversi browser implementano i loro motori javascript. Ho provato questo sui "principali" browser, ma non so come si comporterebbe con le versioni precedenti di ciascuno.

Sì, cercando qualsiasi commento su questo, questo è più per divertimento che altro!

Grazie

risposta

1

String splitting per i dati di 1,4 MB, non è un problema per le macchine decenti, invece si dovrebbe preoccupare la velocità di connessione a Internet degli utenti. Ho provato a fare il controllo ortografico con un dizionario da 800 kb (che è metà dei dati), il problema principale era il tempo di caricamento.

Ma sembra che i dati dei record degli studenti possano essere inseriti nel database, e potrebbe non essere necessario caricare tutto al momento del caricamento. Quindi, che ne dici di effettuare un'impaginazione per mostrare i record degli utenti o utilizzare ajax per richiedere la ricerca di determinati nomi utente?

+0

+1 l'unico problema che vedo è affidarsi a un'implementazione JS basata su browser. – lexu

1

Se è un davvero stringa di grandi dimensioni può pagare per tagliare in modo continuo la stringa con 'string'.slice(from, to) ad elaborare solo un sottoinsieme più piccolo, aggiungendo tutti i singoli elementi alla fine dell'output con list.push() o qualcosa di simile potrebbe funzionare.

I metodi di divisione delle stringhe sono probabilmente il modo più efficiente per farlo anche in IE. L'elaborazione di singoli caratteri utilizzando string.charAt(x) è estremamente lenta e spesso mostra un errore di sicurezza in quanto blocca il browser. L'utilizzo di metodi split split sarebbe sicuramente molto più rapido rispetto alla divisione utilizzando espressioni regolari.

Potrebbe anche essere possibile codificare i dati utilizzando un array JSON, alcuni browser più recenti come IE8/Webkit/FF3.5 hanno un parsing JSON veloce integrato utilizzando JSON.parse(data). Ma l'uso di eval(JSON) potrebbe far traboccare il browser se ci sono abbastanza dati, quindi è probabilmente una cattiva idea. Tuttavia, potrebbe pagare per confrontare per prestazioni.

Un approccio molto migliore in molti casi è utilizzare AJAX e caricare solo alcuni dati contemporaneamente dal server, risparmiando anche tempo di download.

1

Oltre agli eccellenti commenti di S. Mark sulla velocità locale rispetto a x-fer e sulla tip per ricodificare usando AJAX, suggerisco di allontanarmi (a lungo termine) da JavaScript nel browser (supponendo che sia eseguito) a un'implementazione non-browser di JS (o eventualmente un'altra lingua).

Un JS basato su browser sembra un collegamento di una settimana in una catena data-x-fer e nulla vorrei eseguire senza monitoraggio, dal momento che i browser vengono aggiornati di volta in volta e interrompere il tuo JS-x-fer potrebbe essere un inaspettato effetto collaterale!

Problemi correlati