Sto utilizzando la proprietà innerHTML
per modificare dinamicamente uno DIV
, per segnalare un processo che richiede alcuni secondi. Il problema è che su Firefox la pagina non viene effettivamente ridisegnata per riflettere quella modifica fino a quando lo script non è finito. Questo rende l'app delicata. C'è un modo per assicurarti che le modifiche al codice HTML vengano visualizzate immediatamente, anche se sono in esecuzione altri script?Come posso forzare il redraw del browser mentre il mio script sta elaborando un processo pesante?
8
A
risposta
14
Il browser è a thread singolo. Mentre lo script è in esecuzione, il browser non può fare nient'altro. Se vuoi fare qualcosa come un indicatore di avanzamento, devi usare setTimeout()
o setInterval()
e suddividere l'attività in blocchi più piccoli che vengono eseguiti su un intervallo. Ciò lascia degli intervalli tra le esecuzioni degli script, restituendo il controllo al browser, in cui il browser può essere ridisegnato.
6
Provare a interrompere periodicamente lo script. Dovreste essere in grado di utilizzare
setTimeout(nextFunction, 0);
per fornire l'interruzione necessaria, senza un lungo ritardo, dove nextFunction è la funzione che continua con la lunga elaborazione.
Problemi correlati
- 1. Il mio script PowerShell sta stampando un '1' prima del mio output previsto. Perché?
- 2. Mostra il mio layout mentre SurfaceView sta caricando Camera Preview
- 3. Il modo migliore per bloccare e l'applicazione mentre il database sta facendo un lavoro di fondo pesante?
- 4. Come posso eseguire il mio script CGI perl senza apache?
- 5. Prevenire un processo pesante dall'affondamento nel file di scambio
- 6. Come posso sapere quanta energia sta utilizzando il mio computer?
- 7. perché il nodo del gelsomino non sta rilevando il mio script di aiuto?
- 8. Come forzare l'attivazione di una finestra del browser utilizzando l'estensione/il plug-in del browser?
- 9. posso simulare il carico http pesante dalla macchina un client
- 10. Posso forzare i browser Web a inviare il testo del modulo come UTF8?
- 11. Posso congelare il mio rendering dell'interfaccia utente mentre il mio modulo viene caricato?
- 12. Cambia il colore del testo mentre l'utente sta digitando?
- 13. XMLParser sta mangiando il mio spazio vuoto
- 14. Perché il mio processo termina?
- 15. Come posso rendere il mio script Python più veloce?
- 16. Impossibile avviare il processo del browser per Ripple
- 17. Come distribuire il mio script Python/shell?
- 18. Come visualizzare/eseguire il debug delle intestazioni delle richieste non standard che il browser del mio telefono sta inviando?
- 19. Come posso effettuare il marshalling di un riferimento COM fuori processo tra i limiti del processo?
- 20. Come forzare il ricaricamento del file php.ini?
- 21. Disabilita cache della pagina per forzare il caricamento della pagina con il pulsante Indietro del browser
- 22. Cosa sta gonfiando il mio png?
- 23. Come posso forzare il download di un file utilizzando php?
- 24. Come posso forzare overflow: hidden per non uso il mio spazio padding-right
- 25. Jest non sta eseguendo il pre-elaborazione del mio JSX
- 26. OSX - Come posso vedere il TID di tutti i thread del mio processo?
- 27. Come posso aggiornare automaticamente un browser Web?
- 28. Come rendere il mio programma un processo in background
- 29. Come forzare IntelliJ a inserire solo il mio codice sorgente?
- 30. Come posso impostare l'ambiente Rails per il mio script Ruby un po 'autonomo?
Sembra non essere il caso che il browser sia a thread singolo. Ha un thread javascript ma c'è un thread parallelo che rende la pagina e manipola il DOM –
Questo dipende molto dal * quale * browser stai parlando. Alcuni potrebbero farlo ora, come Chrome con il suo modello multiprocesso, in cui il contenuto di ciascun browser è un processo separato, e il chrome è anche sul proprio processo. ma puoi ancora facilmente bloccare qualsiasi browser con 'while (1)'. Quanto del browser si blocca dipende da come viene costruito il browser. – Breton
Puoi appendere thread js chiamando while (1) {}, ma ciò non significa che non ci siano altri thread usati per manipolazione dom o rendering di contenuti. Significa che il thread JS può eventualmente bloccare l'esecuzione di altri thread. E i thread potrebbero non avere alcuna relazione con il modello di processo del browser (un processo per pagina o un processo per l'intera finestra del browser) –