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

javafx11 最佳实践

警告:我在这里给出的提示适用于JavaFX Mobile的当前版本,该版本是JavaFX 1.1 SDK的一部分。 在将来的版本中,行为将发生变化,上述工件的当前不良性能将被优化或至少得到显着改善。 我在这里写的所有内容都是快照,不应理解为

最后!

项目3:使用简单的形状代替图像
第4项:使用小图像代替复杂形状

这两个项目似乎相互矛盾。 不幸的是,这里没有简单的答案:有时使用形状更好,有时使用图像更好。 为了帮助您做出正确的决定,应考虑以下几点:

  • 复杂性单个基本形状(例如矩形或圆形)几乎总是比图像更快。 但是,为了获得所需的工件而组装的形状数量越多,或者用户定义的路径越复杂,对这些形状进行的操作就越昂贵。 并且优势缩小。 重要说明:javafx.text.Text对象是一个非常复杂的形状。
  • 大小大多数图像操作的性能都是二次方的,这意味着如果将宽度和高度加倍,则操作速度将减慢4倍,如果将宽度和高度加倍,则操作速度将减慢9倍,等等。因此,元素越大,使用形状越好。
  • 变换旋转或缩放不仅在使用形状时看起来更好,而且通常也比变换图像更快。 特别是如果对旋转和缩放进行动画处理,形状将表现得更好。
  • 启动时间加载图像和设置ImageView通常比设置形状要慢。
  • 足迹静态和动态的足迹几乎总是使用较高的图像时。

要点:当前在运行时中不使用javafx.scene.Node的变量缓存。 设置它没有区别!

现在我们将专注于图像加载

项目5:使用预缩放功能
如果图像需要缩放并且缩放比例以后不更改,建议使用预缩放功能。 这可以通过设置Image对象的宽度和高度来完成,该对象将在加载图像时缩放图像。

使用预缩放有两个好处。 首先,它可以带来更好的性能。 如果使用预缩放,则缩放肯定只计算一次。 相比之下,每当ImageView对象的变换被其他东西(然后是转换)改变时,都会重新计算其缩放比例。 例如,更改旋转将导致重新计算缩放比例。 其次,如果图像按比例缩小,则使用预缩放后,内存使用量将大大减少。
如果标志Image.smooth为false,则可以更快地计算缩放比例。 但是必须检查缩放图像的质量。


本示例为许多图像生成缩略图。 代码示例1使用ImageView的缩放功能创建了一系列缩略图。

def thumbnails = for (i in [0..11])ImageView {image: Image {url: "{__DIR__}images/img{i}.png"}preserveRatio: truefitWidth: 30fitHeight: 20}

代码示例1:在ImageView中缩放
如代码示例2所示,使用Image类的预缩放功能可以实现相同的效果。使用这种方法显示缩略图通常更快,并且内存使用量要小得多。

def thumbnails = for (i in [0..11])ImageView {image: Image {url: "{__DIR__}images/img{i}.png"preserveRatio: truewidth: 30height: 20}}

代码示例2:使用图像进行预缩放

项目6:使用后台加载
Image类提供了一个很好的但容易被忽略的功能,可以在后台异步加载图像。 这不会提高运行时性能或减少应用程序的占用空间,但可以大大缩短启动时间。 要启用它,必须设置标志Image.backgroundLoading。
后台加载有两个后果,在实现过程中需要考虑这些后果。 如果应该在创建后不久显示加载在后台的图像,则必须检查下载进度。 否则,将首先显示空白图像。 另一个选择是将变量占位符设置为显示替代图像,直到完成实际图像的加载为止。 在下面的示例中使用了这种方法。

第二个结果是,直到图像完全加载后,才设置图像的宽度和高度。 这可能会破坏任何布局,这取决于所用图像的大小。 同样,如果占位符图像和最终图像具有相同的大小,则可以使用占位符图像来克服此问题。 或者可以手动设置宽度和高度,这会将图像预缩放为给定的大小。 最后一个选择是在图像加载完成后重新计算布局。


代码示例3从上方扩展了示例,以在后台加载缩略图并显示它们。 加载图像后,将显示一个占位符(logo.png),其大小与缩略图相同。 请注意,徽标未加载到背景中,以确保我们可以立即显示它。

def logo = Image {url: "{__DIR__}images/logo.png"}def thumbnails = for (i in [0..11])ImageView {image: Image {url: "{__DIR__}images/img{i}.png"preserveRatio: truewidth: 30height: 20backgroundLoading: trueplaceholder: logo}x: i mod 4 * 50 + 20y: ((i/4) as Integer) * 40 + 20}Stage {scene: Scene {content: thumbnails}}

代码示例3:在后台加载缩略图
在仿真器上,必须看起来非常接近才能注意到后台加载。 在真实设备上,加载图像通常需要更长的时间。 启用背景加载后,屏幕将快速显示,首先仅显示占位符,这些占位符被真实图像一个接一个地替换。 如果禁用了后台加载,则应用程序将显示空白屏幕,直到完全加载并显示所有图像为止。

第7项:使用def而不是var定义变量。 使它们成为脚本专用。
定义实例变量时,优良作法是尽可能限制可访问性。 同样,如果变量立即被初始化且之后没有重新分配,则应使用关键字def对其进行定义。 几乎所有绑定变量都是如此,因为绑定变量无法重新分配(不存在非绑定操作),并且通常在定义它们时就已经知道它们绑定的对象。

除了产生更清晰,更不易出错的代码外,遵循这些建议还可以提高性能。 我们可以向编译器提供的提示越多,它就越可以优化我们的代码。 让我们看一下代码示例1中的示例。

class Main {def i1: Integer = 0;var i2: Integer;public def i3: Integer = 0;public var i4: Integer;}

代码示例1:具有公共,私有def和var的示例脚本
代码示例1定义了一个具有四个成员i1,i2,i3和i4的小类。 变量i1和i2是私有脚本,i3和i4是公共变量; 变量i1和i3用def定义,i2和i4用var定义。 代码示例2显示了部分生成的Java代码。

class Main extends java.lang.Object implements Main$Intf,com.sun.javafx.runtime.FXObject{public int $Main$i1;public int $Main$i2;public int $i3;public final com.sun.javafx.runtime.location.IntVariable $i4;...}

代码示例2:从代码示例1生成的Java代码的一部分
生成的Java代码的显着之处在于,除i4之外的所有变量都变成了简单的整数。 只有变量i4被转换为IntVariable,因为它需要提供更多的功能。 一个Int变量比IntVariable实例需要更少的内存并执行得更快。

条款8:使用整数代替数字
整数运算总是比浮点值运算快。 在通常没有台式计算机之类的数学协处理器的有限设备上,两者之间的差异是巨大的。 因此,在可能的情况下,最好使用整数。
JavaFX编译器的类型推断机制通常在确定变量的正确类型方面做得很好,但是如果有疑问,它将选择Number。 因此,应该始终明确设置Integer变量的类型。

条款9:使用Sequence类的功能
软件包javafx.util中的Sequences类提供了大量用于处理序列的有用函数。 应该熟悉提供的功能并使用它们,而不要自己实现。 序列中的功能已经过全面测试,其性能至少要好于自己实现的性能。

参考:来自JCG合作伙伴的 JavaFX移动应用程序最佳实践 3和JavaFX移动应用程序 最佳实践 4和JavaFX移动应用程序 最佳实践5   “ 迈克博客”上的迈克尔·海因里希斯


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

javafx11 最佳实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团队项目:界面设计

游戏内关卡为2D横版界面,背景为楼群贴图,整体色调以灰色为主,与摩托车手的主题相配。游戏中配有音效及背景音乐,背景音乐为我组成员自行创作录制完成。界面展示如下: 图1 游戏中设计图 图中显示的摩托车手即为玩家操控…

vues响应接口and实例

目录 Vue.js 响应接口 Vue.set Vue.delete Vue.js 实例 导航菜单实例 编辑文本实例

Hystrix简介

在过去的几天里,我一直在探索Netflix Hystrix库,并欣赏了这个出色的库所提供的功能。 引用Hystrix网站上的内容: Hystrix是一个延迟和容错库,旨在隔离对远程系统,服务和第三方库的访问点,停止级联故障&am…

MP3音乐播放器搜索引擎-鼠标拖动窗口

定义鼠标的按压,移动,施放事件 (1)鼠标的按压事件 globalpos是全局坐标,即鼠标相对于桌面屏幕左上角的坐标我们通过this->frameGeometry().topLeft();可以获得当前窗口的左上角的x左边或y坐标 在移动事件中我们可以…

SpringMVC学习--文件上传

简介文件上传是web开发中常见的需求之一,springMVC将文件上传进行了集成,可以方便快捷的进行开发。 springmvc中对多部件类型解析在 页面form中提交enctype"multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解…

VS code常用的快捷键

在前端的开发过程中,如果有一个比较好的开发工具,配合一些常用的快捷键,开发效率将大大提升,正所谓工具善其事必先利其器。前端推荐使用编辑器VS code,用过HB-X,ST3,Webstorm等编译器之后就会发现,前端编辑…

平台日志架构说明log4j漏洞问题解析

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每…

2016/06/22 中色启动筹码分析作业

2016/06/22 中色启动筹码分析作业——待核实 201转载于:https://www.cnblogs.com/carl2380/p/5608596.html

让我们暂停一微秒

低延迟Java应用程序中的许多基准测试涉及必须在一定负载下测量系统。 这就要求保持事件进入系统的稳定吞吐量,而不是在没有任何控制的情况下以全油门将事件泵入系统。 我经常要做的任务之一是在事件之间暂停生产者线程一小段时间。 通常,此时间量为个位…

浏览器各个属性的作用

作为前端程序员不可避免的会和浏览器打交道,所以要对浏览器的各个属性的作用进行了解,方便开发及调试,这里以谷歌浏览器为例进行简单的介绍。一是巩固对浏览器属性的认识,二是方便大家的学习。首先打开谷歌浏览器按F12查看控制台属…

Moment.js日期处理库的使用

Moment.jsMoment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率。这个在一些金融保险公司会经常用到,比如一下时间的格式化处理,时间的选择等等。这个比较好的地方是可以格式化时间&#xff0…

spring ldap_Spring 3,Spring Web Services 2和LDAP安全

spring ldap今年的开局很好,其中另一个“截止日期不会改变” /“跳过所有繁文tape节” / “狂野西部”类型的项目中,我必须弄清楚并使用相对而言实现一些功能。新的库和技术需要进行更改,Spring 3并不是新增功能,但是在Java 5&…

转: 微博的多机房部署的实践(from infoq)

转: http://www.infoq.com/cn/articles/weibo-multi-idc-architecture 在国内网络环境下,单机房的可靠性无法满足大型互联网服务的要求,如机房掉电,光缆被挖的情况也发生过。微信就曾发生大面积故障,包括微信信息无法发出、无法刷…

知道这些性能优化手段,工资起码提升一倍

1.什么是性能?性能指标有哪些?计算机的性能,其实和我们干体力劳动很像,好比是我们要搬东西。对于计算机的性能,我们需要有个标准来衡量。这个标准中主要有两个指标。第一个是响应时间(Response time)或者叫…

JAX-RS和JSON-P集成

这篇简短的文章讨论了JAX-RS 2.0中对JSON-P的支持 JSON-P…? JSON处理API (JSON-P)是Java EE 7中引入的。 它提供了用于处理JSON数据的标准API,并且与XML对应的JAXP非常相似。 JSON-B (JSON绑定)API已在Ja…

亲手把360奇安信软件卸载了,爽!

由于工作原因,在上一家公司安装了360奇安信安全软件,到了下一个公司还需要安装另一个安全软件,这个必须要卸载,卸载!卸载!但是卸载需要输入密码,没有密码还输入卸载不了,我曾经联系3…

VM虚拟机中CentOS6.4操作系统安装一

在 VMware中鼠标单击“编辑虚拟机设置”,在弹出的“虚拟机设置”对话框中的“硬件”标签中选择“CD/DVD(IDE)”,然后在右侧的“CD /DVD(IDE)”连接选项中选择“使用ISO映像文件”,使用“浏览”按…

vue基础教程总结篇,用最短的时间入门vue.js(持续更新...)

目前,vue已经成为前端工程师必会的框架之一,这里简单总结一下,可以让您快速的入门vue,师傅带进门,修行靠个人,最主要的还是自己多动手,多实践,本专栏会持续更新。 1.vue安装教程及简介 2.vue计…

gcc代码反汇编查看内存分布[2]: arm-linux-gcc

arm-none-linux-gnueabi-gcc -v gcc version 4.4.1 (Sourcery G Lite 2010q1-202) 重点: 代码中的内存分配, 地址从低到高: 代码段(RO, 保存函数代码) --> 只读数据段(RO, 保存常量) --> 数据段(RW, 已初始化并且初始值不为0的全局变量和静态变量) -->bss段(RW, 未初…

关于SP一些响应码的API返回码及解析集合

在一些金融的行业(银行、证券、保险等),如果接触了一些中间件,比如长城、恒银、广电等一些厂商的设备,不同的厂商有不同的一些规范,在应用开发的过程中难免会和中间件的错误码打交道,这里总结一…