2012-07-10 14 views
6

Sto scrivendo un'applicazione a pagina singola. Quando la pagina viene inizialmente servita, contiene molti elementi DOM che contengono stringhe json che sto iniettando nella pagina.rimozione elementi DOM inutilizzati per prestazioni

Quando la pagina viene caricata sul client, la prima cosa che accade è che questi elementi DOM vengono analizzati da oggetti json a javascript e quindi non vengono mai più utilizzati.

Esiste un vantaggio in termini di prestazioni per eliminarli dal DOM e ridurne le dimensioni? Non ho trovato dati conclusivi su questo aspetto. Per informazioni, questi elementi hanno una dimensione di circa 500K.

Grazie per i vostri suggerimenti.

+1

È possibile impostare alcuni casi di test e fare prove a tempo. – TheZ

+0

Quali elementi sono? Se non sono nel corpo, potrebbe non essere davvero necessario rimuoverli - una volta che il DOM viene analizzato, viene analizzato. – Dancrumb

+0

Ho un caso simile in cui tengo l'HTML per popup temporanei o tooltip nel DOM. È utile pulirli? – Halcyon

risposta

1

indipendente dal fatto che si tira la JSON dal DOM, si potrebbe considerare questa tecnica per compresi i tuoi oggetti JSON:

<script type='text/json' id='whatever'> 
    { "some": "json" } 
</script> 

i browser ignorano completamente il contenuto di questi script (ad eccezione, naturalmente, per le stringhe embedded che assomigliare a </script>, che mi viene in mente per le cose che un serializzatore JSON potrebbe voler gestire in qualche modo), quindi non rischi di imbattersi in progetti con e commerciali e cose incorporati. Probabilmente è una vittoria per le prestazioni in sé e per sé: il browser probabilmente ha un tempo più semplice per cercare la fine del blocco <script> piuttosto che guardare attraverso cose che pensa sia un contenuto reale. È possibile ottenere il contenuto alla lettera con .innerHTML.

+0

Forse solo semantica, ma dovresti raccomandare la proprietà 'text' piuttosto che innerHTML perché gli elementi di script non contengono markup. ;-) – RobG

+0

@RobG Sono d'accordo ma non sono sicuro che funzioni su tutti i browser. Potrebbe. – Pointy

4

Ci sarebbe un vantaggio in termini di prestazioni nella cancellazione dal DOM e ridurne le dimensioni?

In termini di prestazioni del DOM, in generale, meno interagisci con il tuo DOM, meglio è.

Ricorda che i tuoi selettori attraversano il dominio, quindi se utilizzi selettori inefficienti, le prestazioni saranno scarse a prescindere, ma se selezioni gli elementi in base all'ID anziché alla classe o all'attributo laddove possibile, puoi ottenere buone prestazioni fuori dalla pagina, indipendentemente dal fatto che tu abbia eliminato quegli elementi di markup estranei.

Quando la pagina viene inizialmente servita, contiene molti elementi DOM che contengono stringhe JSON che sto iniettare nella pagina .... Per info, questi elemnts sono circa 500K di dimensione.

In termini di caricamento della pagina, le prestazioni stanno già risentendo del trasferimento di tutti questi dati. se riesci a trovare un modo per trasferire solo JSON, potrebbe solo aiutare. Cancellare dopo il fatto non risolverebbe questo particolare problema, però.

+0

+1 per "trasferire separatamente il json" – Bergi

+0

Ok, potenziato per i tuoi approfondimenti. Ho deciso di spostare le stringhe JSON sul tag