我有个习惯,就是很多东西都习惯往桌面上仍,然后等桌面满了在清理,不过还好我每次都把桌面的文件打开查看一下有没有必要备份到相关目录,今天看到了个鸡肋,备份不太值得,删了又可惜,放上来暂存。
当时研究javafx,这方面资料太少,前几天去书店,就两本书,一个就是javafx本质论,另一个是ria客户端javafx方面的,本质论都翻烂了,看了看ria那本译本,也是基础知识,感慨sun被收购后,javafx注定也是后娘养的了。当初在oracle网站看了一个程序员大姐写的应用技术方面的改善,总结了一下写到了word文档里了,因为我英文水平有限,说是翻译确实有点侮辱人家文章了,自己的理解吧,如果你正在应用javafx做一些东西,下面这些建议对于优化你程序的有一定的参考意义:
1 尽量避免使用反锯齿
使用反锯齿会出现更加复杂的翻译。 为此,除非它是真正地需要的,否则应该关闭反锯齿。Smooth为shape的属性,所有继承于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掉,而不是将visible设为false,因为属性依然消耗系统资源。
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.)