`
傅庆岩
  • 浏览: 91595 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaFX应用的改善技术

阅读更多

    我有个习惯,就是很多东西都习惯往桌面上仍,然后等桌面满了在清理,不过还好我每次都把桌面的文件打开查看一下有没有必要备份到相关目录,今天看到了个鸡肋,备份不太值得,删了又可惜,放上来暂存。

    当时研究javafx,这方面资料太少,前几天去书店,就两本书,一个就是javafx本质论,另一个是ria客户端javafx方面的,本质论都翻烂了,看了看ria那本译本,也是基础知识,感慨sun被收购后,javafx注定也是后娘养的了。当初在oracle网站看了一个程序员大姐写的应用技术方面的改善,总结了一下写到了word文档里了,因为我英文水平有限,说是翻译确实有点侮辱人家文章了,自己的理解吧,如果你正在应用javafx做一些东西,下面这些建议对于优化你程序的有一定的参考意义:

  

 

1 尽量避免使用反锯齿

使用反锯齿会出现更加复杂的翻译。 为此,除非它是真正地需要的,否则应该关闭反锯齿。Smoothshape的属性,所有继承于shape的子类都具有smooth属性。

例如,一个长方形,除非需要它进行旋转,否则使用smooth是完全没有必要的

Circle {

     clip: Rectangle {

         smooth: false

     }

  }

 

2图片的使用技巧

当图象对象被创造时,它请求以下行为:

a装载文件

b分配图象内存

c解码图象格式

对于相同的图画,我们应该用复用的方式来进行调用,以避免重复的进行图像初始化操作

例如,下例实现了图片的复用

var node: Node;

var img: Image {

   url: "http://my.server.com/image.png"

}

 

Group{

   content: bind [

      node

      ImageView{

         image: img

      }

   ]

}

 

 通过指定图像的高度和宽度,能够有效减少图片的资源消耗。

 

3 时间线的优化 人眼的感知频率是24fr,关键帧设为40ms(25fr)以上即可,如果再高人眼已经不能分辨,所以设为40ms以下以提升频率没有意义。

  def clip = Timeline {

   repeatCount: Timeline.INDEFINITE

   keyFrames:      

      KeyFrame {

         time: 40ms // 25 fps

         action: function () : Void {...}

      }  

}

 

根据显示器刷新来设定,合理设置能够降低CPU使用率

  var t1 = Timeline {

    framerate: 15

    repeatCount : Timeline.INDEFINITE

    autoReverse: true

    keyFrames: [

        at (0s)   { coordX => 0 ; coordY => 450; },

        at (10s) { coordX => 450 ; coordY => 0;  }

    ]

};

 

 

4 Group组策略

比较下面两段代码,一个将效果加到整个Vbox范围内,一个加到Rectangle范围内,实现了同样的效果,但是对于资源节约上,后者有优势。但是这样是针对最小实现,如果一个组内所有元素都需要实现效果,为了保证效果,依然要把效果加到组的范围。我们的目的就是最小化责任单元。

scene: Scene{

    content:

        VBox {

            content: for (i in [1..100])

                HBox {

                    content: for (j in [1..100])

                        Rectangle{

                            width: 100 height: 100 fill: Color.RED

                        }

                }

                effect: DropShadow {}

        }

}

 

 

 

scene: Scene{

    content:

        VBox {

            content: for (i in [1..100])

                HBox {

                    content: for (j in [1..100])

                        Rectangle{

                            width: 100 height: 100 fill: Color.RED

                            effect: DropShadow {}

                        }

                 }

        }

}

 

 

5 缓存机制

主要针对effects效果的操作,但是旋转不支持缓存效果。

 

6 Def  Var

如果是初期化后就不在进行变化的值,最好用def的方式定义。

这个可以参考javafx基础

 

7 Scene

每个场景尽可能的小,不要在一个场景中定义更多的东西。在保证满足功能的前提下,能够提取出的尽量提取出无关组件,对于不需要的组件,尽量从场面图表去remove掉,而不是将visiblefalse,因为属性依然消耗系统资源。

 

8 避免多余的Bind,Bound

数据捆绑是JavaFX一个强有力的特点,使开发人员定义二个变化事物之间的关系。 每当一个关联事物改变,自动地更新另一关联物。 然而,切记使用绑定是相当昂贵的操作。 设法避免多余的捆绑,例如绑定到值不改变的事物。

绑定原则:在必须的时候再用。

 

9 尽量避免用Stroke

  如果你想改变文本的颜色或者画一个具有边框的填充四边形,使用fill而不使用Stroke是个更好的选择,因为这样比通过将一个长方形放到另一个长方形上来获得两个填充的长方形更加快速。(It is faster to render two filled rectangles by placing one rectangle on top of the other.

 

 

分享到:
评论

相关推荐

    gym:JavaFX应用程序来计划锻炼

    标题中的“gym”指的是一个基于JavaFX的健身应用程序,旨在帮助用户规划和跟踪他们的锻炼。...通过这些特性,"gym:JavaFX应用程序来计划锻炼"为健身爱好者提供了一个全面的平台,帮助他们管理和优化自己的健身旅程。

    java swt javaFx 整合 自带浏览器 实现 调用网页echart

    由于SWT的`Browser`在某些平台上可能对现代Web标准支持不够理想,因此可能需要借助JavaFX的`WebView`来改善用户体验。 **Echarts** 是百度开发的一款基于JavaScript的开源数据可视化库,广泛应用于网页数据展示。...

    javafx11-jpa-crud:带有Hibernate的JavaFX和JPA(Java持久性API)技术的演示项目

    javafx11-jpa-crud该项目演示了将JavaFX和JPA(Java Persistence API)技术与Hibernate结合使用的桌面应用程序。旨在改善我的逻辑而创建的项目完全是由我开发的,没有任何预先计划。一切都是根据不断出现的需求来...

    Javafx1:测试阶段需要大量升级

    首先,JavaFX 1代表着该技术的早期版本。随着时间的推移,JavaFX经历了多次重大更新,从JavaFX 2到现在的JavaFX 16,引入了大量新特性、性能优化和API改进。早期版本可能存在的问题,如兼容性、性能和功能限制,在...

    Java_EE_API + JDK_API + JavaFX8_API.rar

    API文档中涵盖了这些技术的接口和类,帮助开发者理解如何在应用程序中集成和使用它们。 - **Java EE 6**:此版本进一步增强了轻量级开发,推出了CDI(Contexts and Dependency Injection)和JAX-RS(Java API for ...

    桌面精灵应用多线程滚动字幕万年历定时提醒等技术

    在IT领域,开发一款“桌面精灵应用”涉及多种关键技术,如多线程、滚动字幕、万年历计算以及定时提醒。以下将详细介绍这些技术及其在项目中的应用。 首先,多线程技术是现代计算机程序设计中的核心概念,特别是在...

    Java Magazine SeptemberOctober 2017.pdf

    FXMLLoader是JavaFX的一部分,允许开发者通过FXML(一种基于XML的标记语言)来注入自定义行为,从而增强JavaFX应用程序的功能性和交互性。 杂志还提供了对Java相关书籍的评论,如《On Java 8》和《Murach’s Java ...

    过程数字图像:Projeto JavaFX desenvolvido nas aulas de Processamento数字图像

    **过程数字图像与JavaFX应用开发** 在计算机科学领域,过程数字图像(Digital Image Processing)是一种重要的技术,用于分析、修改和操作图像数据。这个领域涵盖了许多算法和技术,包括图像增强、去噪、分割、特征...

    dotnet 8 WPF 支持在 RDP 远程桌面状态下启用渲染硬件加速.rar

    标签中提到的“C#”和“JAVA”暗示这篇文档可能不仅适用于 .NET 平台的 C# 开发者,也可能涉及到跨平台的 Java 开发者,因为 Java 也有类似的技术,如 JavaFX,可以构建桌面应用程序,并且在 RDP 环境下也有类似性能...

    Java_桌面版立见的重写.zip

    标签为空,所以我们无法直接获取到特定的关键词,但我们可以推断,这个主题可能涉及的Java技术包括:JavaFX、Swing、GUI设计、代码重构、性能优化、跨平台开发以及可能的事件驱动编程模型。 压缩包中的“Suwayomi-...

    introducing-java-8.pdf

    Java 8 是Java编程语言的一个重要更新版本,由Raoul-Gabriel Urma所著的《Introducing Java ...通过阅读本书,读者可以快速掌握Lambda表达式和流的使用,并将其应用到自己的项目中去,进而在编程实践中提高效率和质量。

    QCon 2009 beijing全球企业开发大会ppt:20.RIA领域的设计开发流程

    通过引入新的工具和技术以及调整组织架构和工作流程,可以有效改善RIA项目的用户体验。尤其是Adobe Flash Catalyst的使用,不仅提高了设计与开发之间的沟通效率,还确保了最终产品能够忠实还原设计初衷,为用户提供...

    Java电子相册源码技术资料

    Java电子相册源码技术资料是一份集合了Java编程语言在开发电子相册软件方面的实践应用和理论知识的资源包。这份资料对于学习Java编程、软件开发,特别是想要深入理解如何利用Java实现图像处理和多媒体展示功能的...

    Spring和Desktop的关系

    Spring框架最初设计时主要是为了改善企业级Java应用的开发体验,特别是针对服务端应用。然而,随着技术的发展,Spring也开始涉足桌面应用开发。在桌面应用领域,Spring可以提供类似于Web开发中的优势,如组件化、...

    基于Java和PLC技术的新型智能药箱的研制.zip

    在现代科技日新月异的发展下,智能设备已经成为我们日常生活的一部分。本文将深入探讨一个结合了Java编程语言和可编程逻辑控制器(PLC)技术的...随着技术的进步,我们期待更多这样的创新产品能够改善人们的生活质量。

    jdk1.7.0_40 下载(jdk-7u40-windows-i586-demos.zip)

    例如,垃圾收集器的性能得到改善,降低了内存占用,提升了应用响应速度。 2. 安全增强:此版本包含了多项安全补丁,修复了多个已知的安全漏洞,增强了Java应用程序的安全性,防止恶意代码攻击。 3. JavaFX 2.2.40...

    java方向毕业设计题目.docx

    该系统的目标是利用现代信息技术改善城市交通状况,通过收集并分析实时交通数据来提高道路通行效率。 **技术要点**: - 数据采集:通过传感器等设备获取交通数据。 - 数据处理:利用Java进行数据清洗、分析。 - ...

Global site tag (gtag.js) - Google Analytics