da blogoracle
Introduzione
Essendo stato per alcuni anni, c'è un corpo di lavoro dignitose per JavaFX scritto utilizzando il linguaggio JavaFX Script. Con l'annuncio disponibilità di JavaFX 2.0 Beta, la domanda sorge naturale sulla conversione del codice legacy verso il nuovo JavaFX 2,0 piattaforma. Questo articolo riflette su alcune delle osservazioni incontrati durante il porting del codice sorgente da più di JavaFX Script per il nuovo paradigma JavaFX API.
L'applicazione
Il programma scelto per la migrazione è un'implementazione del gioco Sudoku e serve come applicazione di riferimento per il libro JavaFX - Sviluppare Rich Internet Applications . Il design del programma può essere suddiviso in due componenti principali: (1) L'interfaccia utente (l'ideale JavaFX per la progettazione) e (2) il generatore di puzzle. Per il contesto di questo articolo, il nostro interesse primario risiede nell'interfaccia utente. Il codice generatore di puzzle è stato sollevato da un progetto sourceforge.net ed è scritto interamente in Java.Indipendentemente da quale versione dell'interfaccia utente che scegliamo (JavaFX Script vs JavaFX 2.0), senza modifiche al codice sono state necessarie per il codice generatore di puzzle.
L'interfaccia utente originale per l'applicazione JavaFX Sudoku è stato scritto esclusivamente in JavaFX Script, e come tale è un candidato adatto per la conversione verso il nuovo 2.0 JavaFX modello. Tuttavia, alcuni punti degni di nota sono da segnalare su questo programma. Prima di tutto, è stato scritto nell'arco di tempo che 1,1 JavaFX, dove alcune funzionalità del framework JavaFX sono stati come ancora non disponibile. Citando due esempi, questo programma crea molti dei suoi controlli di interfaccia utente da zero perché il built-in controlli sono stati ancora essere introdotto. Inoltre, il layout grafico dei nodi viene fatta in modo molto manuale, ancora una volta perché gran parte delle funzionalità di layout automatiche erano in movimento al momento. Vale la pena di considerando che questo programma è stato scritto in un momento in cui la maggior parte di noi era appena venuta fino a velocità su questa tecnologia. Si potrebbe pensare che avere la possibilità di ricreare questa applicazione di nuovo, sarebbe stata molto diversa dalla versione attuale.
Confrontando la dimensione del codice sorgente
Si è tentato di convertire ogni file originali JavaFX Script fonte UI (suffisso. Fx) oltre ad una controparte Java. A causa delle differenze caratteristica del linguaggio, ci sono un piccolo numero di file sorgente che esistono solo in una versione o l'altra . La tabella seguente riassume le dimensioni di ogni file sorgente.
JavaFX Script file sorgente | Numero di linee | Numero di caratteri | JavaFX 2.0 Java file sorgente | Numero di linee | Numero di caratteri |
ArrowKey.java | 6 | 72 | |||
Board.fx | 221 | 6831 | Board.java | 205 | 6508 |
BoardNode.fx | 446 | 16054 | BoardNode.java | 723 | 29356 |
ChooseNumberNode.fx | 168 | 5267 | ChooseNumberNode.java | 302 | 10235 |
CloseButtonNode.fx | 115 | 3408 | CloseButton.java | 99 | 2883 |
ParentWithKeyTraversal.java | 111 | 3276 | |||
FunctionPtr.java | 6 | 80 | |||
Globals.java | 20 | 554 | |||
Grouping.fx | 8 | 140 | |||
HowToPlayNode.fx | 121 | 3632 | HowToPlayNode.java | 136 | 4849 |
IconButtonNode.fx | 196 | 5748 | IconButtonNode.java | 183 | 5865 |
Main.fx | 98 | 3466 | Main.java | 64 | 2118 |
SliderNode.fx | 288 | 10349 | SliderNode.java | 350 | 13048 |
Space.fx | 78 | 1696 | Space.java | 106 | 2095 |
SpaceNode.fx | 227 | 6703 | SpaceNode.java | 220 | 6861 |
TraversalHelper.fx | 111 | 3095 | |||
Totale | 2077 | 79.127 | 2531 | 87.800 |
Alcune note su questa tabella sono in ordine:
- Il numero di linee in ogni file è stato determinato eseguendo il comando Unix 'wc-l' oltre ogni file.
- Il numero di caratteri in ogni file è stato determinato eseguendo il comando Unix 'ls-l' oltre ogni file.
- L'esame del codice potrebbe certamente essere molto più rigorosi. Senza formattazione standard è stata effettuata su questi file. Tutti i commenti però sono stati cancellati.
C'era una certa aspettativa che la nuova versione di Java richiede più righe di codice rispetto alla versione originale dello script JavaFX. Come evidenziato da un conteggio del numero totale di linee, la versione Java ha linee di circa il 22% in più rispetto al suo omologo Script FX.
Inoltre, c'è stato un ulteriore aspettativa che la versione Java sarebbe più prolisso in termini di numero totale di caratteri. Di fatto i dati precedenti mostrano che in media i file sorgente Java contiene meno caratteri per riga rispetto ai file FX. Ma non è tutta la storia. Su un ulteriore esame, i file di script fonte FX ha un numero sproporzionato di caratteri vuoti. Perché? A causa della natura di come si sviluppa il codice JavaFX Script. L'oggetto letterale domina FX codice script. La sua non è raro vedere letterali oggetto rientrato a metà della pagina, consumando un sacco di spazi senza senso.
Consumo di RAM
Non è l'analisi più scientifica, l'utilizzo di memoria per l'applicazione è stata esaminata su un sistema Windows Vista eseguendo il Task Manager di Windows e la visualizzazione di quanta memoria è stata consumata dalla versione Sudoku in questione. In parole povere, la versione dello script FX, dopo l'avvio, ha un ingombro di circa 90MB di RAM ed è rimasta praticamente la stessa dimensione. La versione Java iniziato a circa 55MB e ha sostenuto che taglia tutta la sua esecuzione.
What About vincolante?
Probabilmente, l'osservazione più sorprendente la conversione da JavaFX Script per JavaFX 2,0 riguardava la necessità di sincronizzazione dei dati, o la loro mancanza. In JavaFX Script, il mezzo principale per la sincronizzazione dei dati avviene attraverso l'espressione bind (utilizzando la parola chiave "legare"), e forse in misura minore che si dirà "sostituire" cugino. La parola chiave legano non esiste in Java, quindi per JavaFX 2.0 un API Associazione di dati è stato introdotto in sostituzione.
Per dare un'idea della differenza tra le due versioni del programma Sudoku, la tabella che segue indica il numero di lega erano necessari per ogni file sorgente. Per JavaFX Script file, questo è stato accertato, semplicemente contando il numero di occorrenze della legano parola chiave . Come si può vedere, il legame era stato usato di frequente nella versione JavaFX Script (e non prende in considerazione un ulteriore mezzo dozzina o giù di lì " a sostituire " trigger). Il programma di JavaFX 2,0 raggiunge le stesse funzionalità della versione originale JavaFX Script, ma l'equivalente di legame era necessario solo due volte in tutta la versione Java del codice sorgente.
JavaFX Script file sorgente | Numero di Lega | JavaFX successiva file sorgente Java | Numero di "Lega" |
ArrowKey.java | 0 | ||
Board.fx | 1 | Board.java | 0 |
BoardNode.fx | 7 | BoardNode.java | 0 |
ChooseNumberNode.fx | 11 | ChooseNumberNode.java | 0 |
CloseButtonNode.fx | 6 | CloseButton.java | 0 |
CustomNodeWithKeyTraversal.java | 0 | ||
FunctionPtr.java | 0 | ||
Globals.java | 0 | ||
Grouping.fx | 0 | ||
HowToPlayNode.fx | 7 | HowToPlayNode.java | 0 |
IconButtonNode.fx | 9 | IconButtonNode.java | 0 |
Main.fx | 1 | Main.java | 0 |
Main_Mobile.fx | 1 | ||
SliderNode.fx | 6 | SliderNode.java | 1 |
Space.fx | 0 | Space.java | 0 |
SpaceNode.fx | 9 | SpaceNode.java | 1 |
TraversalHelper.fx | 0 | ||
Totale | 58 | 2 |
Conclusioni
Poiché la tecnologia JavaFX 2.0 è così nuovo, e l'esperienza con la piattaforma è la stessa, è possibile e anzi probabile che alcune delle osservazioni notato nel precedente articolo può non applicarsi in altri tentativi di migrazione delle applicazioni. Detto questo, questa prima esperienza indica che il codice migrazione Java sarà probabilmente maggiore, anche se non così ampiamente, rispetto alla fonte originale Script Java FX. Inoltre, anche se molto importante, sembra che i requisiti per la sincronizzazione dei dati via vincolante, può essere significativamente meno con la nuova piattaforma .
Corso Java - Corsi Java - Corsi programmazione Java
Nessun commento:
Posta un commento
Nota. Solo i membri di questo blog possono postare un commento.