2010-07-23 18 views

risposta

15

document.write() non sembra essere molto dannoso per il rendimento della pagina nella maggior parte dei browser. In effetti, ho eseguito alcuni test allo DHTML Kitchen e ho rilevato che in Firefox, Opera e Chrome, document.write() era in realtà più veloce al primo caricamento e comparabile in velocità dell'HTML standard agli aggiornamenti successivi. Internet Explorer 8 era l'eccezione, ma in realtà era più veloce degli altri browser per il rendering dell'HTML (sorprendentemente).

As Guffa's answer indica, e quello che stavo creando, i problemi di prestazioni reali provengono da script inline stessi. Il rendering del contenuto può continuare solo quando uno script in linea ha terminato l'esecuzione, quindi se hai una routine complessa all'interno di uno script inline puoi interrompere in modo evidente il caricamento della pagina per l'utente finale. Ecco perché è preferibile attendere onload/DOMReady e utilizzare la manipolazione DOM.

È particolarmente imprudente utilizzare document.write() dopo che il documento ha terminato il caricamento. Nella maggior parte dei browser, usando document.write() dopo che il caricamento del documento implica anche document.open(), che cancellerà lo HTML corrente dallo schermo e creerà un nuovo documento.

Ciò non significa che document.write() non abbia i suoi usi, è solo che la maggior parte degli sviluppatori lo utilizza per i motivi sbagliati. problemi reali con document.write() includono:

  • Non si può usare in documenti serviti come XHTML (per i browser che analizza correttamente XHTML come XHTML).
  • Sovrascrive l'intera pagina quando viene utilizzata dopo il completamento dell'analisi DOM.
  • Aggiunge contenuto alla pagina che non è accessibile ai browser con JavaScript disabilitato (anche se <noscript> a volte è una soluzione valida qui).
  • Più difficile da gestire rispetto all'HTML statico.
6

Se si dispone di script eseguiti nel mezzo della pagina, il browser deve attendere il completamento dello script prima di poter continuare a analizzare il resto della pagina.

Per rendere la tua pagina veloce, vuoi che il browser analizzi la pagina il prima possibile in modo che possa essere mostrata all'utente, dopodiché puoi applicare le funzionalità extra aggiunte dagli script.

+2

Vorrei aggiungere che ogni volta che viene inserito un nuovo codice HTML tramite document.write() l'intera pagina viene analizzata di nuovo e l'intera cascata CSS e tutto il resto. – Robusto

+1

Questo vale per qualsiasi script, non solo per 'document.write'. –

+2

@Robusto: Hm ... Non è possibile analizzare di nuovo l'intera pagina. Come 'document.write' viene usato mentre la pagina viene analizzata, l'analisi non è ancora completa ... – Guffa

0

Penso che ci siano alcune ragioni per cui dovrebbe essere evitato.

ma cosa vuoi dire è che, se si dispone di qualche parte nel codice html di un

<script> 
document.write('mystuff') 
</script 

uno dei problemi è che bevore il browser in grado di visualizzare il vostro sito web, si deve caricare il Javascript interprete. se volete iniziare il vostro javascript solo body.onload allora in grado di visualizzare l'intero sito per l'utente, e quindi eseguire il javascript ... quindi

il tempo di caricamento soggettivo è più veloce :-)

Problemi correlati