当前位置: 首页 > 面试题库 >

WebFX在JavaFX中的性能

淳于凯
2023-03-14
问题内容

我有一个HTML5 UI和一个Java后端,并希望避免在纯Java中重建HTMLui,所以我的想法是运行一个本地Web服务器,并使用WebView在“本机”窗口中呈现它。解决方案似乎是使用可以嵌入到swing中的JavaFXWebView。在纸上听起来很不错(尤其是因为他们声称使用WebKit,对于我在Chrome /Safari中的UI而言,它的性能要好得多)。

它有效,但是:性能令人难以置信。比Chrome,Safari(甚至更慢的Firefox)中的同一个对象慢几个数量级。这实际上是不可用的(我的UI大量使用了JQuery/JS)。顺便说一句,我使用从代码这个职位。

问题是:

  1. 有人可以支持我的经验吗?我是在做错什么,还是这是JavaFX造成的,因此是“正常”的?

  2. 有什么更好的主意如何实现这一目标?我目前只是在启动系统浏览器,该浏览器可以运行,但是效果不佳(看起来不像集成的那样)。


问题答案:

我已经使用WebView了很多,通常性能非常好并且非常有用。

  • 符合Html5标准是好的。
  • JavaScript的性能各不相同,但根据Google的V8基准测试(可能是针对Chrome进行了调整),我发现它的速度约为最新版本的Chrome的三分之一。
  • 渲染性能似乎并不是什么大问题。
  • 非常密集的HTML Webapp(例如Chrome实验库中的某些Web应用)的启动速度不如其他某些浏览器中的启动速度。
  • 不支持WebGL,因此回落到WebGL图形软件渲染的网站要慢得多。

我对WebView的最大问题是,它对尖端功能和广泛使用的稳定性不如其他浏览器稳定,但实际上并没有任何严重的性能问题。

以下是一些基准统计数据(所使用的WebView版本来自JavaFX 2.2 build 9):

合规

运行html5测试以测试html5符合性(满分为500):

Chrome 19402 + 13奖励积分
Firefox 12345 + 9奖励积分
WebView 2.2b9 296 + 7奖励积分 
IE 9.0.6 138 + 5奖励积分

运行acid3测试,Webview与其他测试浏览器的得分相同,为100/100,但是,与IE9一样,最终呈现效果略有缺陷。

Java脚本

Sunspider
Javascript基准测试(越低越好):

IE 9.0.6 146.7毫秒 
Chrome 19 151.5毫秒
Firefox 12 185.8ms
WebView 2.2b9 199.5毫秒

GoogleV8
Javascript基准测试(越高越好):

铬19 15323
的Firefox 12 9557
网页浏览器2.2b9 5145
IE 9.0.6 3661

Mozilla Kraken
Javascript基准测试(越低越好):

Chrome 19 2416.8ms
Firefox 12 2112.9ms
WebView 2.2b9 7988.9毫秒
IE 9.0.6 9403.0毫秒

密集帆布

旋转3D佛(越高越好):

Chrome 19 60fps
Firefox 12 43fps
IE 9.0.6 16帧/秒
WebView 2.2b9 7帧/秒

jQuery查询

jQuery测试套件执行(越低越好):

Chrome 19 21826ms
WebView 2.2b9 22742毫秒
Firefox 12 23554ms
IE 9.0.6 28247毫秒

根据上述基准(在Windows7桌面上运行),只要WebView对您来说足够稳定和功能正常,那么WebView与其他浏览器的性能就不会成为问题(只要您的应用程序没有很多功能,3D旋转佛.... :-)。

更新资料

正如uta的回答所言,对于JavaFX 2.2的Win 32位版本,JavaScript JIT编译器已打开;对于JavaFX 2.2 的Win
64位版本,JavaScriptJIT编译器已关闭。这意味着与运行32位JavaFX版本相比,运行64位JavaFX版本时,WebView
JavaScript基准测试明显慢得多(通常慢4至5倍)。



 类似资料:
  • 我正在自己学习Oracle的JavaFX教程。在做了很多年(很久以前)之后,我对Swing的新智能功能非常着迷,包括。属性。我惊讶地发现,这些示例(例如:https://docs.oracle.com/javafx/2/ui_controls/table-view.htm)并没有以我认为“正确”的方式使用它们。 该示例创建一个类,其属性为字段: 但是getter不是用于属性,而是用于它们的值

  • 我现在正在使用JavaFX,我正在跟随一个教程来学习Java的这一部分。不过,我有一个关于属性的问题: 如何正确处理JavaFX中的派生属性? 让我以一个例子来澄清。假设您有一个具有简单属性的模型: null 但是,表视图不接受整数,而只接受可观察的整数。如果有人更改用户的生日,我希望表自动更改。 我可以在中创建,但我不认为这是一个解决方案。我还可以在类中创建一个名为的,但我听起来不太对,因为ag

  • 我是JavaFx新手。我设计了一个table thorugh scenebuilder,其中第1列有一个按钮,第2列有一个复选框。单击按钮时,我希望获得checkbox属性的内容。但问题是,我的输出总是错误的。这是我的密码 模型JAVA 在我的控制器类中,我按照以下方式设计了initialize()方法 控制器。JAVA 这里是

  • 主要内容:JavaFX属性的类型,读/可写属性,只读属性,JavaFX JavaBean,属性更改事件JavaFX属性存储控件的内部状态,并允许我们监听来自JavaFX UI控件的状态更改。JavaFX属性可以彼此绑定。绑定行为允许属性根据来自另一个属性的更改值来同步其值。 JavaFX属性的类型 有两种类型的JavaFX属性: 读写(Read/Writable) 只读(Read-Only) JavaFX的属性包含实际值,并提供更改支持,无效支持和绑定功能。所有JavaFX属性类都位于包命名空间

  • 我一直在努力提高JavaFX中线形图的性能,但没有取得很大的成功。我还发现,这似乎是一些程序员在试图显示大数据时发现的一个常见问题(big在这里代表数据大小 好吧,我在stackoverflow中发现了两个帖子,其中有一个类似的问题,即具有65000个数据点的JavaFX LineChart和JavaFX LineChart-绘图数组的性能问题。主题具有65000个数据点的JavaFX LineC

  • 我试图将Lombok与JavaFX属性结合使用: 这将为属性本身生成getter和setter: null getID():int 集合id(int id) GetIdProperty():SimpleIntegerProperty getName():string setName(字符串名称) GetNameProperty():SimpleStringProperty ... 这在龙目岛支持吗