venerdì 24 giugno 2011

Osservazioni in Migrazione da JavaFX Script per JavaFX 2,0

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

Corso programmazione Android - Certificazione Android

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.