Repository 32bit  Forum
Repository 64bit  Wiki

prestazioni javascript?

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

prestazioni javascript?

Messaggioda sya54M » lun mar 25, 2013 21:35

Buona sera a tutti, stavo provando a fare una notifica di caricamento durante un calcolo pesante in javascript, cioè a far comparire un <div> quando inizia a calcolare e scomparire alla fine del calcolo.
Una cosa del genere:
Codice: Seleziona tutto
document.getElementById("caricamento").style.display = "block";
do {
...
}
while(...);
document.getElementById("caricamento").style.display = "none";

Ma l'unico browser che sembra comportarsi bene è opera (ed è anche il più veloce ad eseguire il calcolo).
Chrome si ferma subito dicendo che uno script sta rallentando la pagina, firefox aspetta qualche secondo e dice la stessa cosa ma dopo un po' porta a buon fine il calcolo, però il <div> non compare mai, sembra che durante il calcolo il browser sia congelato e si scongela a fine calcolo.
Se non sono riuscito a far capire la situazione chiedete pure.
Come mai sia chrome che firefox sembrano così fragili? è colpa del mio codice?
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1434
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.17.x
Desktop: KDE 4.14

Re: prestazioni javascript?

Messaggioda teox99 » lun mar 25, 2013 23:14

La velocità di js si nota soprattutto nella gestione del dom e non nei calcoli matematici complessi o cicli impegnativi, che dovrebbero essere esegiti lato server.
Ci sono vari benchmark da provare lato client se cerchi.
Questo è interessante
http://jsperf.com/for-or-while
Avatar utente
teox99
Linux 2.6
Linux 2.6
 
Messaggi: 735
Iscritto il: ven lug 25, 2008 13:54
Località: Roma[Eur]
Slackware: 13.37
Desktop: KDE - Xfce

Re: prestazioni javascript?

Messaggioda sya54M » mar mar 26, 2013 9:00

Sì ma volevo fare un'applicazione statica che girasse offline nel browser.
La cosa strana è che document.getElementById("caricamento").style.display = "block"; è prima del while, ma il browser si freezza prima che il div venga renderizzato.
Separando la funzione con un setTimeout di mezzo secondo funziona:
Codice: Seleziona tutto
function funzione() {
  document.getElementById("caricamento").style.display = "block";
  setTimeout("continua();", 500);
}
function continua() {
do {
...
}
while(...);
document.getElementById("caricamento").style.display = "none";

Non fa in tempo a renderizzare il div che già entra nel while se non faccio in questo modo.
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1434
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.17.x
Desktop: KDE 4.14

Re: prestazioni javascript?

Messaggioda lennynero » mar mar 26, 2013 9:38

...usa un worker;)
Avatar utente
lennynero
Linux 2.6
Linux 2.6
 
Messaggi: 567
Iscritto il: dom mag 02, 2004 23:00
Località: Salerno
Slackware: 14.1-x64
Kernel: 3.10.17
Desktop: xfce-4.10

Re: prestazioni javascript?

Messaggioda sya54M » mar mar 26, 2013 9:46

ieri sera ho trovato qualcosa su internet riguardo questo worker, ma non ci ho capito molto :oops:
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1434
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.17.x
Desktop: KDE 4.14

Re: prestazioni javascript?

Messaggioda sya54M » mar mar 26, 2013 10:06

ok mi sono informato meglio leggendo una spiegazione in italiano, in inglese mi viene difficile.
ma mi viene complesso inviare molti dati alla ui usando il postMessage.
non si potrebbe creare una semplice funzione sleep che però metta a riposo la cpu, quindi senza cicli di calcoli?
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1434
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.17.x
Desktop: KDE 4.14

Re: prestazioni javascript?

Messaggioda kentaromiura » gio ott 03, 2013 17:49

So che questo thread é un po vecchio ma volevo spiegare il perché succede questo.

EcmaScript nel browser é single-threaded, per cui, nel tuo do/while tu stai bloccando il thread, impedendo il render a video, probabilmente Opera lo mostra per il semplice motivo che il repaint del div viene triggerato in maniera diversa, non tutti i browser triggano i repaint allo stesso modo.

Non é possibile usare un sleep, e' possibile scrivere il codice 'ad eventi' in maniera tale da riprendere l' esecuzione una volta finito il calcolo.

La soluzione piu' semplice e' usare un setTimeout(callback, 0) o un requestAnimationFrame/setImmediate nei browser nuovi per poi, alla fine del calcolo, andare a nascondere nuovamente il div, in pratica devi riscrivere il tuo codice in maniera da utilizzare delle callback, come hai fatto nel tuo esempio dove hai usato 500ms di setTimeout.


* setImmediate: https://github.com/NobleJS/setImmediate
* request Animation Frame: http://www.paulirish.com/2011/requestan ... animating/
kentaromiura
Linux 1.0
Linux 1.0
 
Messaggi: 3
Iscritto il: gio ott 03, 2013 17:28
Slackware: 14.1 ARM

Re: prestazioni javascript?

Messaggioda sya54M » ven ott 04, 2013 7:28

Ti ringrazio dell'intervento, ma infatti avevo già fatto con setTimeout, però per non spezzare le funzioni l'ho messo direttamente nelle chiamate alle funzioni nelle pagine html
Codice: Seleziona tutto
onclick="caricamento();setTimeout(function(){funzione(var1,var2,var3,var4,var5,var6);},500);"
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1434
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.17.x
Desktop: KDE 4.14

Re: prestazioni javascript?

Messaggioda paolo1957 » ven ott 04, 2013 8:07

Forse puoi provare con una soluzione un pò diversa: http://jqueryui.com/progressbar/#indeterminate
nessuna
paolo1957
Linux 1.0
Linux 1.0
 
Messaggi: 12
Iscritto il: mar ago 27, 2013 15:50
Località: Roma
Nome Cognome: Paolo Seria
Slackware: slackware64-current
Kernel: 3.10.9
Desktop: kde

Re: prestazioni javascript?

Messaggioda sya54M » ven ott 04, 2013 8:26

molto carino però jquery mi appesantirebbe molto le applicazioni, si tratta infatti di app per android e dovrebbero essere fluide anche su terminali lenti e non togliere risorse utili ai calcoli iterativi che compiono
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1434
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.17.x
Desktop: KDE 4.14


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti