javafx11 最佳实践_JavaFX移动应用程序最佳实践,第1部分
javafx11 最佳實(shí)踐
到現(xiàn)在為止,所有對(duì)JavaFX感興趣的人都會(huì)知道,JavaFX Mobile發(fā)行了不久前。 可以肯定的是,這真是令人難以置信。 我感到非常筋疲力盡,在發(fā)行期間我什至沒(méi)有精力去寫(xiě)博客……
但是到目前為止,我感到很恢復(fù),并且想開(kāi)始一些有關(guān)在準(zhǔn)備發(fā)行版時(shí)所學(xué)到的經(jīng)驗(yàn)的系列文章,并給出一些如何提高JavaFX Mobile應(yīng)用程序性能的提示。
警告 :我在這里給出的技巧對(duì)于JavaFX Mobile的當(dāng)前版本是正確的,該版本是JavaFX 1.1 SDK的一部分。 在以后的版本中,行為會(huì)改變,
當(dāng)前提到的偽像的不良性能將被優(yōu)化或至少得到顯著改善。 我在這里寫(xiě)的所有內(nèi)容都是快照,不應(yīng)理解為
最后!
項(xiàng)目1:避免不必要的綁定
綁定非常方便,毫無(wú)疑問(wèn)是JavaFX Script中最有價(jià)值的創(chuàng)新之一。 不幸的是,它們帶有代價(jià)。 生成的樣板代碼通常不那么小,并且
就像手動(dòng)執(zhí)行一樣快。 尤其是復(fù)雜的依存結(jié)構(gòu)往往會(huì)嚴(yán)重影響性能和占用空間。
因此,建議盡可能避免綁定。 通常,可以使用觸發(fā)器來(lái)實(shí)現(xiàn)相同的功能。 人們不應(yīng)該使用綁定來(lái)避免處理初始化順序的麻煩。 并且綁定到恒定值當(dāng)然沒(méi)有任何意義。
如果綁定變量的更新次數(shù)更多,然后讀取,則大多數(shù)時(shí)候(但并非總是如此!),懶惰綁定會(huì)更快(但并非總是如此),但它們?nèi)圆蝗缡謩?dòng)實(shí)現(xiàn)的快。
例
一個(gè)常見(jiàn)的用例是許多節(jié)點(diǎn),這些節(jié)點(diǎn)的位置和大小取決于舞臺(tái)的大小。 一個(gè)典型的實(shí)現(xiàn)使用綁定來(lái)實(shí)現(xiàn)這一點(diǎn)。
在這里,我們將看一個(gè)類(lèi)似于這種情況的簡(jiǎn)單示例。 場(chǎng)景由三個(gè)矩形組成,這些矩形從左上角到右下角傾斜排列。 矩形的大小是屏幕大小的四分之一。 代碼示例1顯示了具有綁定的實(shí)現(xiàn)。
代碼示例1:使用綁定計(jì)算的布局
人們應(yīng)該考慮的第一個(gè)問(wèn)題是綁定是否真的必要。 在實(shí)際設(shè)備上,只有在切換屏幕方向時(shí)(前提是設(shè)備支持此功能),屏幕大小才會(huì)更改。 如果我們的應(yīng)用程序不支持屏幕旋轉(zhuǎn),則可以將布局定義為常量。
代碼示例2中顯示了一種減少綁定數(shù)量的可能解決方案。引入了兩個(gè)變量width和height,分別綁定到stage.width和stage.height。 它們的唯一目的是為stage.width和stage.height提供觸發(fā)器,因?yàn)槲覀儾幌敫采w原始觸發(fā)器。 矩形的位置和大小是在觸發(fā)器中手動(dòng)計(jì)算的。
代碼示例2:在觸發(fā)器中計(jì)算的布局
毫無(wú)疑問(wèn),代碼示例1中的代碼更加優(yōu)雅。 但是測(cè)量模擬器中兩個(gè)代碼片段的性能后,結(jié)果發(fā)現(xiàn)代碼示例2中的代碼幾乎快了一倍。
在下面的內(nèi)容中,我們將介紹提高JavaFX Mobile應(yīng)用程序性能的第二個(gè)技巧。 我認(rèn)為這和上一個(gè)是最重要的。
警告 :我在這里給出的技巧對(duì)于JavaFX Mobile的當(dāng)前版本是正確的,該版本是JavaFX 1.1 SDK的一部分。 在以后的版本中,行為會(huì)改變,
當(dāng)前提到的偽像的不良性能將被優(yōu)化或至少得到顯著改善。 我在這里寫(xiě)的所有內(nèi)容都是快照,不應(yīng)理解為
最后!
項(xiàng)目2:使場(chǎng)景圖盡可能小
在運(yùn)行時(shí)的幕后,進(jìn)行了大量通信以更新場(chǎng)景圖中節(jié)點(diǎn)的變量。 場(chǎng)景圖包含的元素越多,需要的通信就越多。 因此,使場(chǎng)景圖盡可能小至關(guān)重要。 特別是動(dòng)畫(huà)往往會(huì)遭受大型場(chǎng)景圖的困擾。
不好的做法是始終將節(jié)點(diǎn)保留在場(chǎng)景圖中,并通過(guò)可見(jiàn)標(biāo)記或不透明度控制其可見(jiàn)性。 場(chǎng)景圖中的不可見(jiàn)節(jié)點(diǎn)仍然是背景通訊馬戲的一部分。 相反,應(yīng)該從場(chǎng)景圖中刪除節(jié)點(diǎn)并僅在需要時(shí)添加它們。 但是這種方法有一個(gè)缺點(diǎn)。 添加或刪除節(jié)點(diǎn)比設(shè)置可見(jiàn)性花費(fèi)的時(shí)間更長(zhǎng)。 因此,在緊急響應(yīng)至關(guān)重要的情況下,這可能不合適。
例子1
通常一個(gè)人只有一組節(jié)點(diǎn),其中只有一個(gè)是可見(jiàn)的。 例如,這些可以是不同的頁(yè)面,也可以是可視化元素不同狀態(tài)的節(jié)點(diǎn)。 可能會(huì)嘗試將所有節(jié)點(diǎn)添加到場(chǎng)景圖中,并僅將當(dāng)前節(jié)點(diǎn)設(shè)置為可見(jiàn)。
代碼示例1顯示了此方法的簡(jiǎn)化版本。 創(chuàng)建三個(gè)彩色圓圈以可視化某種狀態(tài)(紅色,黃色,綠色)。 任何時(shí)候都只有一個(gè)節(jié)點(diǎn)可見(jiàn)。 (讓我們忽略一秒鐘,這可以簡(jiǎn)單地通過(guò)更改單個(gè)圓圈的填充顏色來(lái)實(shí)現(xiàn)。在現(xiàn)實(shí)應(yīng)用中,可能會(huì)有圖像或更復(fù)雜的形狀用于可視化,而僅僅改變顏色是行不通的。)
def colors = [Color.GREEN, Color.YELLOW, Color.RED];var state: Integer;Stage {scene: Scene {content: for (i in [0..2])Circle {centerX: 10centerY: 10radius: 10fill: colors[i]visible: bind state == i}}} 代碼示例1:使用可見(jiàn)性在節(jié)點(diǎn)之間切換
盡管只顯示了一個(gè)節(jié)點(diǎn),但這會(huì)在場(chǎng)景圖中產(chǎn)生三個(gè)節(jié)點(diǎn)。 應(yīng)該對(duì)其進(jìn)行重構(gòu),以確保場(chǎng)景圖中僅可見(jiàn)節(jié)點(diǎn)。 代碼示例2顯示了一種可能的實(shí)現(xiàn)。
代碼示例2:在需要時(shí)添加和刪除節(jié)點(diǎn)
代碼示例1中的代碼更加緊湊,但是代碼示例2將場(chǎng)景圖中的節(jié)點(diǎn)數(shù)量從三個(gè)減少到了一個(gè)。 在調(diào)整JavaFX Mobile版本的一些演示時(shí),僅通過(guò)確保僅可見(jiàn)節(jié)點(diǎn)參與其中,我們就能夠?qū)?chǎng)景圖中的節(jié)點(diǎn)數(shù)量減少50%或更多。
例子2
如果使用某種動(dòng)畫(huà)來(lái)顯示和隱藏節(jié)點(diǎn),則將節(jié)點(diǎn)添加到場(chǎng)景圖中非常簡(jiǎn)單。 一個(gè)人只需要在fadeIn-animation的開(kāi)始處和fadeOut-animation的末尾執(zhí)行一個(gè)動(dòng)作即可添加或刪除該節(jié)點(diǎn)。 代碼示例3顯示了這種用法,其中通過(guò)更改不透明度來(lái)顯示和隱藏一個(gè)簡(jiǎn)單的消息框。
代碼示例3:使用fadeIn-和fadeOut-animations添加和刪除節(jié)點(diǎn)。
參考: JCG合作伙伴 提供的JavaFX Mobile應(yīng)用程序最佳實(shí)踐和JavaFX Mobile應(yīng)用程序 最佳實(shí)踐2 ? “ 邁克博客”上的邁克爾·海因里希斯
翻譯自: https://www.javacodegeeks.com/2012/03/best-practices-for-javafx-mobile.html
javafx11 最佳實(shí)踐
總結(jié)
以上是生活随笔為你收集整理的javafx11 最佳实践_JavaFX移动应用程序最佳实践,第1部分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 物种起源安卓版(物种起源安卓)
- 下一篇: 房地局备案网签登记表怎么填(房地局备案网