Ok, quindi sto provando a completare il mio progetto impostando il messaggio "Caricamento in corso ..." con l'indicatore di percentuale. Abbastanza facile Il problema è che ho poco più di 6.000 di linee di codice Raphael/SVG
che iniettano qualcosa di più di 2000 nuovi nodi su DOM
. Quindi il vero problema si presenta quando sto cercando di cambiare il mio indicatore% sul messaggio di caricamento, ma il browser è appena congelato fino a quando Raphael
finirà per creare tutti quei nodi.Manipolazione DOM durante il rendering SVG di grandi dimensioni
quello che ho provato e che cosa so:
1) Non ho molto semplice funzione per calcolare% di carico, aumentando count
var e la diffusione di questa funzione in tutto il mio codice 6000. In questo modo simulo il processo di caricamento effettivo. Niente di nuovo.
2) So che questa funzione funziona come magia e attraverso il processo di caricamento in realtà sto passando da zero a 100% -hero.
3) All'interno di questa funzione, ogni volta che ottengo un nuovo valore - sto cercando di aggiornare% sullo schermo - ma non succede nulla fino al caricamento di una pagina completa quando ottengo istantaneamente il 100%.
4) L'unico modo per ottenere l'aggiornamento dell'indicatore è impostare alert()
ogni volta che sto tentando di aggiornarlo. Questa è la polvere magica che cambia il mio indicatore quando sullo schermo compare un avviso-popup.
5) Ho provato setTimeout
e molti altri, come la commutazione visibility
, cambiando position
, la creazione di nodi figlio, in esecuzione loop fittizi ecc ... non serviva a niente ... durante SVG
rendering - tutto è appena sotto lo zero-congelato.
6) L'unica cosa che non rimane bloccata sullo schermo è la mia piccola animazione CSS (cerchio girevole con settore oscurato) (beh, tranne FF - nemmeno l'animazione CSS lì).
7) Ho capito da altre fonti che non riesco a simulare il comportamento di alert()
da solo, quindi non ho fortuna qui.
8) Ho provato defer
e async
, ma non ho problema di caricamento, ho rendering/problema DOM-iniezione di ...
Credo che questo è ciò che voglio ottenere, in condizioni perfette :
1) Voglio sapere - come determinare ogni iniezione/manipolazione nodo-svg?
2) Quindi, come interrompere l'intero processo di rendering/iniezione e fare qualcosa da solo fino a callback
?
3) Poi, come per riprendere?)))
4) O forse c'è qualcosa che ho perso ...
non iniettare 2000 nodi contemporaneamente. iniettare 100, aggiornare lo strumento, quindi iniettare un altro 100. ripetere fino al completamento. – dandavis
Ho provato che ... il problema è: il parser non si ferma ad aggiornare il contatore, inizia semplicemente a leggere tutte le seguenti linee di iniezione ... –
Per favore incolla del lavoro o del violino in modo che si possa aiutare con il reale funzionante – MarmiK