Costo di setInterval in Javascript

4

Ho un codice che voglio eseguire quando alcuni elementi HTML vengono aggiunti alla pagina.
Per fare questo, ho una funzione "runOnRender":

runOnRender: function (func, args, interval) {
            var that = this;
            var guid = hb.getGuid().substr(0,7);

            var checkFunc = function () {
                if (that.$el.height() > 0 && that.$el.width() > 0) {
                    clearInterval(that[guid]);
                    that[guid] = 0;
                    func.call(that, args);
                }
            };

            this[guid] = setInterval(checkFunc, interval || 200);
        }

Impostare l'intervallo su 200 è il più alto possibile prima che ci sia spesso un ritardo notevole nell'attivazione dell'evento. L'ultima cosa che voglio è che i miei utenti si chiedano perché un pulsante sia stato appena cliccato o visto cambiare il testo dell'etichetta, ecc.

Ecco il trucco. È del tutto possibile che questo "runOnRender" sia impostato ..... ma l'Utente non fa mai l'azione che fa l'elemento HTML in questione a colpire il DOM .... il che significa che questo codice manterrà infinitamente in esecuzione come finché la pagina è aperta.

Sono su una macchina potente, potente, di sviluppo .... quindi mi chiedo quale sia il costo di questo codice e se ci sia un modo migliore.

    
posta James P. Wright 15.01.2013 - 19:08
fonte

1 risposta

5

Per lo più, non ti preoccupare, puoi eseguire qualcosa come diverse milioni di linee luminose di codice al secondo. Se passi poche migliaia di persone a fare qualche controllo, non preoccuparti. Il sovraccarico della costruzione dell'intervallo stesso dovrebbe essere trascurabile.

Se vuoi essere sicuro, inserisci un ciclo che esegue il corpo di checkFunc 100 volte, controlla con il task manager quanta CPU mangia e verifica che la pagina sia ancora reattiva. Se questo si verifica bene, anche uno smart phone datato dovrebbe fare il lavoro normale facilmente.

Vale anche la pena notare che la maggior parte dei browser moderni rallenterà l'esecuzione di script su schede inattive consentendo solo loro di eseguire codice come una volta al secondo, quindi non appena la scheda è inattiva non importa se chiedi una volta per 20 o 200 ms, si ottiene solo una volta ogni 1000 ms e gli intervalli non si aggiornano.

    
risposta data 15.01.2013 - 21:57
fonte

Leggi altre domande sui tag