Compressione JavaScript e memorizzazione nella cache delle risorse

2

Sto lavorando a un'idea che non riesco a trovare una buona risposta anche se ore e ore di ricerca,

Sto pianificando una piccola applicazione Canvas / WebGL questa applicazione userà WebSockets per parlare con un server di gioco per sincronizzare i dati da e verso, quindi pensaci come un tipo di servizio MMO

quindi sto pensando di avere un sistema di accodamento per caricare le risorse PER ESEMPIO Faccio una richiesta per ottenere model1 e la sua texture in modo tale da farla quee

Mthd | Data                   | q | p | s
GET  | /asset/model_1/model   | 0 | 0 | 0
GET  | /asset/model_1/texture | 0 | 0 | 0
GET  | /asset/model_1/model   | 1 | 1 | 0
GET  | /asset/model_1/texture | 1 | 1 | 0
...
GET  | /asset/model_1/model   | 5 | 5 | 0
GET  | /asset/model_1/texture | 5 | 5 | 0

chiave

q = quality modifier 
p = priority lower is better
s = status '0 not started, 1 downloading, 2 complete'

quindi il mio cliente sta elaborando quel download però mentre questo sta succedendo un altro giocatore è entrato nella mia vista quindi ho bisogno di quel modello di giocatori e della texture così li aggiungo alla coda e finisco così

Mthd | Data                   | q | p | s
GET  | /asset/model_1/model   | 0 | 0 | 2
GET  | /asset/model_1/texture | 0 | 0 | 2
GET  | /asset/model_2/model   | 0 | 0 | 0
GET  | /asset/model_2/texture | 0 | 0 | 0
GET  | /asset/model_1/model   | 1 | 1 | 1
GET  | /asset/model_1/texture | 1 | 1 | 0
GET  | /asset/model_2/model   | 1 | 1 | 0
GET  | /asset/model_2/texture | 1 | 1 | 0
...
GET  | /asset/model_1/model   | 5 | 5 | 0
GET  | /asset/model_1/texture | 5 | 5 | 0
GET  | /asset/model_2/model   | 5 | 5 | 0
GET  | /asset/model_2/texture | 5 | 5 | 0

Ora voglio memorizzare questi file nella cache del browser, quindi sono legato all'uso del database e alla compressione usando qualcosa come LWZ, o mettendo le risorse online e usando appCache e caricandole.

Quindi le mie domande.

Se carico una risorsa tramite il browser normalmente (richiesta http) il browser manterrà quell'immagine nella memoria una volta che non sarà più visualizzata.

Se uso Javascript per contenere la stringa base64 dovrei quindi rimuovere la stringa dalla variabile javascript (cancella) so che libererebbe la memoria tenendo la stringa ma libererebbe tutta la memoria usata o il browser sarebbe ancora conserva una copia dell'immagine generata da base64 in memoria.

È possibile scrivere il caricamento del contenuto tramite WebSockets nell'appCache E.G la stringa base64 dal server WebSocket.

Qualcuno ha trovato un sistema di compressione delle stringhe migliore per Javascript diverso da LWZ ho intenzione di comprimere usando un'applicazione sul lato server, quindi l'unico limite di compressione è javascript che lo supporta.

    
posta Martin Barker 28.07.2014 - 20:29
fonte

1 risposta

3

If i load an asset though the browser normally (http request) will the browser will keep that image in memory once it's no longer being rendered.

Il browser in genere memorizza nella cache i file, come le immagini. Quando chiedi al server i file, prima chiede se sono cambiati. Se il browser restituisce che il file non è stato modificato, il browser utilizzerà il file dalla cache. (Ciò ha causato alcuni problemi interessanti quando si apportano modifiche ai file .css e .js in cui il nuovo file non viene inviato al client). Per un esperimento sono stato in grado di cancellare un'immagine da una pagina Web dopo averla caricata (usando Dev Tools sia per Firefox che per Chrome) e quindi copiare nuovamente in HTML per renderizzare l'immagine. Guardando la cronologia della rete per la pagina mostra il caricamento iniziale dell'immagine ma non una seconda richiesta dopo aver caricato di nuovo l'HTML nella pagina.

If i use Javascript to hold the base64 string should i then remove the string from the javascript variable (delete) i know it would free up the memory holding the string but would it free it all the memory used or would the browser still keep a copy of the image generated from base64 in memory.

Se si effettua una chiamata per cambiare l'immagine da una stringa codificata Base64 in un'immagine, l'immagine non dovrebbe richiedere la presenza della stringa. In generale, non dovresti avere per eliminare una variabile javascript poiché il garbage collector dovrebbe occuparsene dopo che non è stata utilizzata.

Is it possible to write content loading through WebSockets into the appCache E.G the base64 string from the WebSocket Server.

Dalla mia esperienza con websockets (jWebsockets per la precisione) si interfacciano con il javascript caricato sulla pagina. Poiché puoi anche usare javascript per scrivere nell'appCache non dovresti avere problemi a scrivere la tua stringa base64 su appCache.

link

Has any one found a better string compression system for Javascript other than LWZ i'm planning on compressing using a application at the server side so the only limit on compression is javascript supporting it.

Spiacente, non posso aiutarti con questo. Sembra che questa sia l'opzione più popolare. Senza eseguire molti benchmark non potrei darti un motivo per usare un'alternativa.

    
risposta data 06.08.2014 - 22:13
fonte

Leggi altre domande sui tag