2013-10-24 21 views
5

Mi chiedo se questo codice sta per caricare il client poiché il timeout è troppo lungo?setTimeout() influisce sulle prestazioni

 //and update this again in a bit 
     setTimeout(function() { 
      updateWeather(lat,lng); 
     }, 60000); 
+2

Perché sarebbe facendo notare per un minuto causa più carico che non fare nulla per un tempo più breve? ;-) – RobG

+0

No, non lo è. Tuttavia, un timeout molto breve può essere: http://stackoverflow.com/a/18832977/1768303 – Noseratio

+1

Nessun effetto significativo, 'setTimeout' viene eseguito in un ciclo di eventi, non blocca o danneggia l'esecuzione. –

risposta

2

Non che il codice da soli. Il sistema è inattivo per quel minuto. Finché updateWeather non ha gravi problemi di prestazioni e l'intervallo è breve, setTimeout non sarà un prodotto (e credo che tu intenda setInterval, non setTimeout per i controlli ricorrenti)

+0

Scelto la tua risposta dato che hai menzionato il setInterval - Suppongo che dovrei usare setInterval in questo caso, poiché questo codice di esempio è in realtà all'interno della funzione updateWeather stessa, alla fine della funzione. E 'un cattivo idéa, c'è un miglioramento delle prestazioni nell'uso di setInterval su setTimeout o sono uguali, setInterval è solo un modo pratico per non dover fare questa auto-chiamata che faccio? –

+0

Non l'ho ancora messo a punto, ma in termini di eleganza, setInterval è più bello. Adesso gestirò un benchmark. – bobbybee

0

La risposta alla tua domanda dipende:

  1. Il dispositivo si esegue questo su
  2. L'ambiente - quante volte si fa a eseguire questo

Un setTimeout standalone sarebbe non ferire il browser; tuttavia, se stai facendo ripetutamente la stessa cosa, farebbe la differenza.

Date un'occhiata al seguente sito Web per ulteriori delucidazioni ...

http://ejohn.org/blog/analyzing-timer-performance/

1

Il timer di 60 secondi è implementato dalla magia nel sistema operativo: in pratica non aggiunge carico della CPU durante i 60 secondi che sta aspettando.

Immagino che updateWeather() stia interrogando una risorsa esterna, quindi la risposta alla tua domanda è un semplice "no, va bene". (Dato che il tempo non cambia quello spesso, lo farei comunque 5 minuti, vedi il commento qui sotto sulla durata della batteria.) (Ancora meglio: vedi se il fornitore di dati meteo ti fornisce un campo che ti dice quando il prossimo aggiornamento sarà essere, e utilizzare un setTimeout basato su quello.)

In altre situazioni, ad esempio se sono stati raccolti alcuni tipi di dati per quei 60 secondi e quindi andare ed elaborarli in una volta, ciò potrebbe causare un picco di carico pesante. Che potrebbe essere notato dall'utente (ad esempio, tutte le animazioni diventano a scatti una volta ogni 60 secondi). In tal caso è preferibile utilizzare un timer di 5 secondi e elaborare 5 secondi di dati alla volta.

Al contrario, se si utilizza la rete su un dispositivo mobile, è necessario considerare la durata della batteria: la sveglia e la ricerca di una connessione possono dominare. Quindi estendere un tempo di polling da 60 secondi a 120 secondi può letteralmente raddoppiare la durata della batteria. Ilya Grigorik ha un ottimo capitolo su questo nel suo libro, ad alta Networking Browser Performance http://shop.oreilly.com/product/0636920028048.do ... eccola: http://chimera.labs.oreilly.com/books/1230000000545/ch08.html#ELIMINATE_POLLING

Problemi correlati