Mhh... forse è il contrario, cioè anche le funzioni sono oggetti come gli altriOriginariamente inviato da skidx
forse perché il Javascript fa anche gli oggetti in stile procedurale, non avendo le classi.![]()
Mhh... forse è il contrario, cioè anche le funzioni sono oggetti come gli altriOriginariamente inviato da skidx
forse perché il Javascript fa anche gli oggetti in stile procedurale, non avendo le classi.![]()
per favore NIENTE PVT TECNICI da sconosciuti
non su FireFox ... che adesso serializza come prima, ovvero più lento di IE che ora stà tra Opera ( 60 di average ) e FireFox ( 150 di average ) ... ovvero a 130 di averageOriginariamente inviato da Fabio Heller
Avevo appena provato, ci speravo molto ma... non sembra dare benefici
direi proprio di si ... sei stato tu stesso a dire che JS è basato su funzioni intese come oggettiOriginariamente inviato da Fabio Heller
Mhh... forse è il contrario, cioè anche le funzioni sono oggetti come gli altri![]()
Aspetta...forse ho capito dove sta il problema del mio codice procedurale
Ne ne riparliamo domani
per favore NIENTE PVT TECNICI da sconosciuti
quando vuoi, intanto ho diminuito di 600 millisecondi i tempi su IE, se sforni qualcosa di più veloce facciamo un missile terra ariaOriginariamente inviato da Fabio Heller
Aspetta...forse ho capito dove sta il problema del mio codice procedurale
Ne ne riparliamo domani![]()
![]()
![]()
e se trovo spunti per migliorare ancora la mia oltre a kenta alla cena vi invito anche gm![]()
Non so se dia un risultato sensibile ma nei booleani questoOriginariamente inviato da andr3a
e se trovo spunti per migliorare ancora la mia oltre a kenta alla cena vi invito anche gm![]()
return ('b:'+ Number(__s) +';');
al posto di questo
return ('b:'+(__s==false?'0':'1')+';');
toglie una condizione
per favore NIENTE PVT TECNICI da sconosciuti
si, avevo notato il tuo metodo ... un terniario su booleano contro un cast ... non guadagno niente, c'avevo già provatoOriginariamente inviato da Fabio Heller
Non so se dia un risultato sensibile ma nei booleani questo
...
toglie una condizione
(anzi, ho riprovato, perdo diversi millisecondi prezioni se casto)
ragazzi adesso che mi sono divertito a vedervi gareggiare vi imbocco sulla strada giusta:
http://www.websiteoptimization.com/speed/10/
cosi' ora comincerete a usare gli switch al posto delle if e
a rollarvi i for ->trasformandoli prima in do-while
comunque non ho mai benchmarkato ma questi sono i cast in JS:
BOOL :
!!(*)
STRINGA:
''+(*)
NUMBER:
0+(*)
beh, lo switch non è flessibile come un if, quindi non posso metterlo da nessuna parte, nel mio caso, però è stata la prima via per serializzare e deserializzareOriginariamente inviato da kentaromiura
ora comincerete a usare gli switch al posto delle if e
a rollarvi i for ->trasformandoli prima in do-while![]()
Per il discorso while come ti ho dettoho notato lievissimi miglioramenti solo in IE.
In compenso ora ho riscritto la parte di deserializzazione, quell' if col do while è veramente illeggibile, ho preferito fare una cosa di questo tipo:
che ciclo a parte non è molto più leggibile, però mi evita di assegnare inutilmente chiave e valore in più passate e mi evita un if(if k != 0) sul do while ... vado direttamente in while(--k) aggiungendo un +1 sul parseInt, che ne pensi ? (mi fa da if(k!=0) e da while(--k) in un solo ciclo ... cool ?)codice:function PHP_UnSerializer__Common_ArrayObject (tmp) { var a = this.__s.indexOf(':', 2); var k = parseInt( this.__s.substr(2, (a-2))) + 1; this.reduce((a+2)); while(--k) tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); return tmp; }
ti spiego .... il modo di Fabio fa questoOriginariamente inviato da kentaromiura
comunque non ho mai benchmarkato ma questi sono i cast in JS:
BOOL :
!!(*)
STRINGA:
''+(*)
NUMBER:
0+(*)
return 'b:'+Number(var)+';'
che è più leggibile e corto da scrivere ... ma cosa fa di fatto il JS ???
fa un cast da oggetto o primitiva a Number, che schiaffato in mezzo ad una stringa deve per forza di cose riessere castato come tale o sfruttare in automatico il metodo toString();
2 operazioni più lente se confrontate al mio modo, il quale usa un ternario ( comunque velocissimo ) su una condizione banale booleana e non richiede alcun cast ne alcun implicito toString
'b:'+(__s==false?'0':'1')+';'
semplicemente inserisce un carattere 0 o 1 nella stringa, fa un solo calcolo logico e non usa gli oggetti o un "doppio" cast.
Per concludere, ho riaggiornato ... è tutto uguale, stò solo cercando di ottimizzare quanto più mi è possibile ... ma a questo punto, grazie agli incrementi spaventosi della serializzazione sono tornato al punto di partenza, la deserializzazione è troppo lenta, soprattutto su IE.
Chi mi da un consiglio su come migliorare ?
Io ho finito le idee
![]()
![]()
usare il continue all'interno dei cicli ad esempio
anziche un if che valida le successive operazioni
(vale anche per Fa')
codice:if(!(n || (__s[b].constructor != Function && b != '__class'))) continue;//{ //if(n || (__s[b].constructor != Function && b != '__class')) { ser[a++]=((!isNaN(b))?this.__number(b):this.__string(b))+ (n?this.__undefined():this[__s[b].constructor](__s[b])); //}![]()
se vuoi provare anziche' a usare la negazione sull'if ad applicare il teorema di de morgan dei bluvertigo![]()
e guadagni un pelo con
codice:function PHP_Serializer() { if((''+Object).indexOf('(') != 16) this.__cut = 9; else this.__cut = 10; }
ed ora e' giunto il tempo di fare sul serio:
ti mostro la prima implementazione al mondo del kenta Faster device
(non esiste in giro):
e' la versione del Duff faster ancora piu' veloce ^_^;;codice:function PHP_UnSerializer__Common_ArrayObject(tmp) { var a = this.__s.indexOf(':',2); var k = parseInt(this.__s.substr(2,(a-2))) + 1; this.reduce((a+2)); var testVal=k; if(parseInt(k/8)){ var n=k%8; do{ tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); --testVal; tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); --testVal; tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); --testVal; tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); --testVal; tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); --testVal; tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); --testVal; tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); --testVal; tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); --testVal; }while(testVal!=n); } while(--testVal) tmp[this[this.__s.substr(0,1)]()] = this[this.__s.substr(0,1)](); return tmp; }
meglio di cosi' sfido ^_^;;