JavaFX 中 WebView 的性能
Posted
技术标签:
【中文标题】JavaFX 中 WebView 的性能【英文标题】:Performance of WebView in JavaFX 【发布时间】:2012-06-01 13:00:01 【问题描述】:我有一个 html5 UI 和一个 Java 后端,并且希望避免在纯 java 中重建 HTML ui,所以我的想法是运行本地网络服务器并使用 webview 在“本机”窗口中呈现它。解决方案似乎是使用可以嵌入到 swing 中的 JavaFX WebView。在纸上听起来很棒(特别是因为他们声称使用 WebKit,它对我在 Chrome / Safari 中的 UI 具有明显更好的性能)。
它有效,但是:性能非常糟糕。比 Chrome、Safari(甚至更慢的 Firefox)中的相同速度慢几个数量级。它实际上是不可用的(我的 UI 大量使用了 JQuery / JS)。顺便说一句,我正在使用来自this post 的代码。
问题是:
有人可以支持我的经验吗?我只是做错了什么还是这是由 JavaFX 引起的,因此是“正常的”?
有更好的方法来实现这一点吗?我目前只是启动系统浏览器,它可以工作但不是很好(看起来不像集成的)。
【问题讨论】:
你能提供你正在测试的内容的链接吗? 您的系统硬件/软件配置是什么? 您引用的示例代码帖子混合了 Swing 和 JavaFX。尝试使用纯 JavaFX 应用访问相同的页面。 我也确实这样做了,性能影响是荒谬的。 我尝试了嵌入式 Swing 版本和纯 JavaFX 版本,两个版本的性能感知和基准对我来说完全一样。 【参考方案1】:我用过很多WebView,通常性能非常好,非常好用。
HTML5 合规性良好。 javascript 性能各不相同,但根据 Google 的 V8 基准(Chrome 可能已针对该基准进行了调整),我发现它的速度大约是最新版 Chrome 的三分之一。 渲染性能似乎不是什么大问题。 非常密集的 HTML Web 应用程序(例如 Chrome 实验库中的一些应用程序)的启动速度不如其他一些浏览器。 不支持 WebGL,因此使用 WebGL 图形软件渲染的网站速度要慢得多。我对 WebView 的最大问题是它在尖端功能和密集使用方面不如其他浏览器那么稳定,但实际上并没有任何严重的性能问题。
以下是一些基准统计数据(使用的 WebView 版本来自 JavaFX 2.2 build 9):
合规性
运行html5 测试以测试 html5 合规性(得分为 500):
Chrome 19 402 + 13 积分 火狐 12 345 + 9 个奖励积分 WebView 2.2b9 296 + 7 加分 IE 9.0.6 138 + 5 加分运行acid3 测试,webview 得分 100/100 与其他测试浏览器相同,但与 IE9 一样,最终呈现略有不完善。
Javascript
Sunspider Javascript 基准测试(越低越好):
IE 9.0.6 146.7ms 铬 19 151.5 毫秒 火狐 12 185.8 毫秒 WebView 2.2b9 199.5msGoogle V8 Javascript 基准测试(越高越好):
铬 19 15323 火狐 12 9557 网络视图 2.2b9 5145 即 9.0.6 3661Mozilla Kraken Javascript 基准测试(越低越好):
铬 19 2416.8ms 火狐12 2112.9ms WebView 2.2b9 7988.9ms IE 9.0.6 9403.0ms密集画布
旋转3D buddha(越高越好):
铬 19 60fps 火狐12 43fps IE 9.0.6 16fps WebView 2.2b9 7fpsJQuery
JQuery test suite执行(越低越好):
铬 19 21826 毫秒 WebView 2.2b9 22742ms 火狐 12 23554 毫秒 IE 9.0.6 28247ms基于上述基准(在我的 Windows 7 桌面上运行),只要 WebView 对您来说足够稳定和功能强大,那么 WebView 与其他浏览器的性能应该不是问题(只要您的应用程序没有功能很多 3D 旋转的佛像...... :-)。
更新
正如 uta 的回答所述,JavaFX 2.2 的 Win 32 位版本和 JavaFX 2.2 的 off for the Win 64 bit build 已打开 JavaScript JIT 编译器。这意味着运行 64 位 JavaFX 版本与 32 位 JavaFX 版本相比,WebView JavaScript 基准测试要慢得多(通常慢 4 到 5 倍)。
【讨论】:
关于 JIT 编译器情况是否相同或有所改善的任何更新? 目前没有我的更新。如果你有一台 Windows 机器,你可以尝试运行一些基准测试来测试在 32 位和 64 位 JVM 中运行的最新版本的 WebView 的性能。 我不知道为什么,但是渲染质量比我系统上的 chrome 或 firefox 低很多(linux64/ubuntu)有什么办法可以解决这个问题吗? @thouliha 渲染质量与性能问题无关。请向您提出渲染质量问题作为新问题,谢谢。 在linux下性能很差,在mac下尤其差。但是在 Windows 上它是 okeish。【参考方案2】:JavaScript JIT 在 Windows x64 的 WebNode 中已关闭。这可能是您的问题的原因。
【讨论】:
有趣。有什么方法可以手动/以编程方式打开它? 启用/禁用 JavaScript JIT 的开关是内部标志或内部代码,外部用户没有公开支持的方式来控制此设置。 AFAIK,JavaScript JIT 仅对 Java 的一些开发人员预览版关闭,但对所有发布版本都打开。对于上述基准,我相信 JavaScript JIT 已打开。 还是这样吗?【参考方案3】:我的网站 (https://mdemo.cqg.com) 还遇到 JavaFX WebView 性能不佳(缓慢、重绘问题)。经过一番谷歌搜索后,我发现了这个话题Integrating JavaFX 2.0 WebView into a Swing Java SE 6 Application。在答案中,有一个建议使用 JxBrowser (http://www.teamdev.com/jxbrowser)——用于 Java 的基于 Chromium 的 Swing/JavaFX 组件。我为我的网站尝试过。网站表现良好 - 没有缓慢或重绘问题(在原始 WebView 中发生)。
【讨论】:
JxBrowser 是免费还是付费工具?如果付费,还有其他免费的选择吗?谢谢。 JxBrowser 可免费用于开源和学术项目:teamdev.com/jxbrowser#evaluate 不是真正的付费。您只能试用 30 天【参考方案4】:在这种情况下,您并不孤单。我仍然对 webview 和谷歌地图有问题。 你可以看到下面的链接。 目前我没有任何答案给你,我知道这很不愉快......
我的帖子的一些例子: - https://community.oracle.com/message/12356161
如果可以的话,请投票: - https://javafx-jira.kenai.com/browse/RT-33217
https://javafx-jira.kenai.com/browse/RT-29123【讨论】:
有消息了!检查 javafx jira ! :) @丹尼尔【参考方案5】:JavaFX webView 看起来速度较慢的一个原因是,与 Web 浏览器不同,它不缓存任何内容。 这必须执行。
【讨论】:
以上是关于JavaFX 中 WebView 的性能的主要内容,如果未能解决你的问题,请参考以下文章
javascript 提供用于从React-Native WebView发送和接收消息的示例实现(使用postMessage / onMessage WebVie)