日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

javafx11 最佳实践_JavaFX移动应用程序最佳实践,第1部分

發布時間:2023/12/3 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javafx11 最佳实践_JavaFX移动应用程序最佳实践,第1部分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

javafx11 最佳實踐

到現在為止,所有對JavaFX感興趣的人都會知道,JavaFX Mobile發行了不久
前。 可以肯定的是,這真是令人難以置信。 我感到非常筋疲力盡,在發行期間我什至沒有精力去寫博客……

但是到目前為止,我感到很恢復,并且想開始一些有關在準備發行版時所學到的經驗的系列文章,并給出一些如何提高JavaFX Mobile應用程序性能的提示。

警告 :我在這里給出的技巧對于JavaFX Mobile的當前版本是正確的,該版本是JavaFX 1.1 SDK的一部分。 在以后的版本中,行為會改變,
當前提到的偽像的不良性能將被優化或至少得到顯著改善。 我在這里寫的所有內容都是快照,不應理解為
最后!

項目1:避免不必要的綁定
綁定非常方便,毫無疑問是JavaFX Script中最有價值的創新之一。 不幸的是,它們帶有代價。 生成的樣板代碼通常不那么小,并且
就像手動執行一樣快。 尤其是復雜的依存結構往往會嚴重影響性能和占用空間。

因此,建議盡可能避免綁定。 通常,可以使用觸發器來實現相同的功能。 人們不應該使用綁定來避免處理初始化順序的麻煩。 并且綁定到恒定值當然沒有任何意義。
如果綁定變量的更新次數更多,然后讀取,則大多數時候(但并非總是如此!),懶惰綁定會更快(但并非總是如此),但它們仍不如手動實現的快。


一個常見的用例是許多節點,這些節點的位置和大小取決于舞臺的大小。 一個典型的實現使用綁定來實現這一點。
在這里,我們將看一個類似于這種情況的簡單示例。 場景由三個矩形組成,這些矩形從左上角到右下角傾斜排列。 矩形的大小是屏幕大小的四分之一。 代碼示例1顯示了具有綁定的實現。

def rectangleWidth: Number = bind stage.width * 0.25;def rectangleHeight: Number = bind stage.height * 0.25;def stage: Stage = Stage {scene: Scene {content: for (i in [0..2])Rectangle {x: bind stage.width * (0.125 + 0.25*i)y: bind stage.height * (0.125 + 0.25*i)width: bind rectangleWidthheight: bind rectangleHeight}}}

代碼示例1:使用綁定計算的布局
人們應該考慮的第一個問題是綁定是否真的必要。 在實際設備上,只有在切換屏幕方向時(前提是設備支持此功能),屏幕大小才會更改。 如果我們的應用程序不支持屏幕旋轉,則可以將布局定義為常量。
代碼示例2中顯示了一種減少綁定數量的可能解決方案。引入了兩個變量width和height,分別綁定到stage.width和stage.height。 它們的唯一目的是為stage.width和stage.height提供觸發器,因為我們不想覆蓋原始觸發器。 矩形的位置和大小是在觸發器中手動計算的。

def r = for (i in [0..2]) Rectangle {}def stage = Stage {scene: Scene {content: r}}def height = bind stage.height on replace {def rectangleHeight = height * 0.25;for (i in [0..2]) {r[i].height = rectangleHeight;r[i].y = height * (0.125 + 0.25*i)}}def width = bind stage.width on replace {def rectangleWidth = width * 0.25;for (i in [0..2]) {r[i].width = rectangleWidth;r[i].x = width * (0.125 + 0.25*i)}}

代碼示例2:在觸發器中計算的布局
毫無疑問,代碼示例1中的代碼更加優雅。 但是測量模擬器中兩個代碼片段的性能后,結果發現代碼示例2中的代碼幾乎快了一倍。

在下面的內容中,我們將介紹提高JavaFX Mobile應用程序性能的第二個技巧。 我認為這和上一個是最重要的。

警告 :我在這里給出的技巧對于JavaFX Mobile的當前版本是正確的,該版本是JavaFX 1.1 SDK的一部分。 在以后的版本中,行為會改變,
當前提到的偽像的不良性能將被優化或至少得到顯著改善。 我在這里寫的所有內容都是快照,不應理解為
最后!

項目2:使場景圖盡可能小
在運行時的幕后,進行了大量通信以更新場景圖中節點的變量。 場景圖包含的元素越多,需要的通信就越多。 因此,使場景圖盡可能小至關重要。 特別是動畫往往會遭受大型場景圖的困擾。
不好的做法是始終將節點保留在場景圖中,并通過可見標記或不透明度控制其可見性。 場景圖中的不可見節點仍然是背景通訊馬戲的一部分。 相反,應該從場景圖中刪除節點并僅在需要時添加它們。 但是這種方法有一個缺點。 添加或刪除節點比設置可見性花費的時間更長。 因此,在緊急響應至關重要的情況下,這可能不合適。

例子1
通常一個人只有一組節點,其中只有一個是可見的。 例如,這些可以是不同的頁面,也可以是可視化元素不同狀態的節點。 可能會嘗試將所有節點添加到場景圖中,并僅將當前節點設置為可見。

代碼示例1顯示了此方法的簡化版本。 創建三個彩色圓圈以可視化某種狀態(紅色,黃色,綠色)。 任何時候都只有一個節點可見。 (讓我們忽略一秒鐘,這可以簡單地通過更改單個圓圈的填充顏色來實現。在現實應用中,可能會有圖像或更復雜的形狀用于可視化,而僅僅改變顏色是行不通的。)

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:使用可見性在節點之間切換
盡管只顯示了一個節點,但這會在場景圖中產生三個節點。 應該對其進行重構,以確保場景圖中僅可見節點。 代碼示例2顯示了一種可能的實現。

def colors = [Color.GREEN, Color.YELLOW, Color.RED];var state: Integer on replace oldValue {insert nodes[state] into stage.scene.content;delete nodes[oldValue] from stage.scene.content;}def nodes = for (i in [0..2])Circle {centerX: 10centerY: 10radius: 10fill: colors[i]}def stage = Stage {scene: Scene{}}

代碼示例2:在需要時添加和刪除節點
代碼示例1中的代碼更加緊湊,但是代碼示例2將場景圖中的節點數量從三個減少到了一個。 在調整JavaFX Mobile版本的一些演示時,僅通過確保僅可見節點參與其中,我們就能夠將場景圖中的節點數量減少50%或更多。

例子2
如果使用某種動畫來顯示和隱藏節點,則將節點添加到場景圖中非常簡單。 一個人只需要在fadeIn-animation的開始處和fadeOut-animation的末尾執行一個動作即可添加或刪除該節點。 代碼示例3顯示了這種用法,其中通過更改不透明度來顯示和隱藏一個簡單的消息框。

def msgBox = Group {opacity: 0.0content: [Rectangle {width: 150, height: 40, fill: Color.GREY},Text {x: 20, y: 20, content: "Hello World!"}]}def fadeIn = Timeline {keyFrames: [KeyFrame {action: function() {insert msgBox into stage.scene.content}},at (1s) {msgBox.opacity => 1.0 tween Interpolator.LINEAR}]}def fadeOut = Timeline {keyFrames: KeyFrame {time: 1svalues: msgBox.opacity => 0.0 tween Interpolator.LINEARaction: function() {delete msgBox from stage.scene.content}}}def stage = Stage {scene: Scene{}}

代碼示例3:使用fadeIn-和fadeOut-animations添加和刪除節點。

參考: JCG合作伙伴 提供的JavaFX Mobile應用程序最佳實踐和JavaFX Mobile應用程序 最佳實踐2 ? “ 邁克博客”上的邁克爾·海因里希斯


翻譯自: https://www.javacodegeeks.com/2012/03/best-practices-for-javafx-mobile.html

javafx11 最佳實踐

總結

以上是生活随笔為你收集整理的javafx11 最佳实践_JavaFX移动应用程序最佳实践,第1部分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。