浏览器中的JavaFX

浏览器中的JavaFX屏幕截图

浏览器中的JavaFX屏幕截图

最近,Carl Dea和我启动了一个新项目,将JavaFX 8引入浏览器。

今天,我想介绍我们创建的前两个概念验证,以查看该想法是否完全可行。


对于不耐烦的人,这里是到PoC的链接。

但请注意,此时启动时间太恐怖了。

JavaFX应用程序启动之前,可能很容易需要1-2分钟。

  • http://jfx8web.netopyr.com/poc1/
  • http://jfx8web.netopyr.com/poc2/

两种概念验证都以不同的颜色显示许多矩形和圆形。 实施这些形状使我们对基础技术有了一个大概的了解,并且对预期的复杂性和努力有了第一印象。 概念验证还包括一个来回移动的圆圈。 尽管此动画绝非壮观,但它为我们提供了预期性能的上限。 如果我们无法以可接受的性能显示此简单动画,则无需在更复杂的动画上浪费时间。

概念验证以Doppio为核心,这只是一个令人惊讶的项目。 Doppio是在浏览器中运行JavaScript中实现的JVM。 这再次证明了规则34的编码器版本:“如果您能想到的话,JavaScript中就有一个实现……”

老实说,我对这种方法非常怀疑。 这样的JVM的性能有多好? 另一方面,JavaScript近年来发展Swift,正如Hendrik Ebbers最近在开玩笑地指出的那样,如今没有比JavaScript更积极地优化了。 值得一试。 正如您在PoC(希望现在开始)中看到的那样,尤其是在第二个PoC中,运行时性能出奇地好。 再次考虑一下您正在看什么:这是一个标准的JavaFX应用程序,已编译为字节码,并且已在用JavaScript实现的JVM中进行了解释(到目前为止,AFAIK Doppio不执行JIT)。 并且使用的JavaFX运行时与标准实现几乎相同。

Doppio仅支持Java 6,但是JavaFX运行时基于Java8。Doppio团队正在努力支持Java 8,但是到目前为止,我们必须以某种方式弥合差距。 我们决定使用RetroLambda ,主要是因为Android的JavaFX端口已在使用它。 这是一个非常有用的工具,它接受兼容Java 8的字节码并将其迁移到Java 7甚至Java 6字节码。 到目前为止,它对我们而言是完美无缺的,目前还不支持默认方法。 我不确定它是否可以投入生产,但是如果您坚持使用Java 6或Java 7,是否想使用Java 8功能,并且已经进行了广泛的测试,则值得一试。

概念验证使用不同的方法在屏幕上渲染JavaFX Scene。 第一个PoC使用软件渲染器。 它是JavaFX运行时的一部分,顾名思义,几乎所有渲染场景的操作都是用Java完成的。 结果是一个字节数组,我们必须将其复制到屏幕上。 另一方面,自定义渲染器尝试使用尽可能多HTML canvas API,即,渲染圆形时,自定义渲染器使用arc()方法。 通常,第二种方法要快得多,因为它可以利用平台中的优化功能。 但这也意味着实施将受到平台可能性的限制。 例如,通常不支持带有视频的高级功能(例如旋转和叠加)以及许多效果。

接下来的步骤是至少再增加两个原型,然后我们将决定要遵循的路线。 而且我们需要确定启动时间。 敬请关注!

翻译自: https://www.javacodegeeks.com/2014/12/javafx-in-the-browser.html

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

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

相关文章

MDB!= JMS,反之亦然

基本 消息驱动Bean(又称为MDB)只是另一个EJB,如无状态,有状态或单例。 使用MessageDriven批注指定。 MDB用于异步消息处理 它们与无状态EJB 相似 ,因为它们都是由EJB容器池化的 但是,它们与无状态EJB不同…

周三的工作 张孝祖

今天的任务是主面板master嘿嘿 上头有几个按钮,登录登出,个人信息,注册注销等,他们是根据用户是否等率决定的 具体代码如下 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System…

CSS 垂直居中

1、使用绝对定位垂直居中 绝对对位原理:元素在过度受限情况下,将margin设置为auto,浏览器会重算margin的值,过度受限指的是同时设置top/bottom与height或者left/right与width。 .absolute_center{/*display:none;*/position:absol…

[ExtJs6] 环境搭建及创建项目

1. 环境搭建 sencha cmd 和 extjs6 sdk.sencha cmd: https://www.sencha.com/products/extjs/cmd-download/extjs6: https://www.sencha.com/sencha cmd 安装过程将其加入系统的环境变量path中。export PATH${PATH}:/Users/shuanggai/bin/Sencha/Cmd/6.2.2.36把改语句添加到 ~/…

通过Spring Integration和RabbitMQ获得高可用性的AMQP支持的消息通道

Spring Integration消息通道默认情况下将消息存储在内存中。 这是因为内存速度快,易于实现,并且不会增加网络成本。 但是,在某些情况下,这可能会引起问题,因为如果应用程序崩溃或服务器意外关闭,所有消息都…

vue之node.js的简单介绍

一、什么是node.js? 它是可以运行JavaScript的服务平台,可以吧它当做一门后端程序,只是它的开发语言是JavaScript 二、安装 1、node.js的特性: - 非阻塞IO模型- 时间驱动 2、运用的场景: - 高并发低业务- 实时场景- 聊…

jQuery之jQuery扩展和事件

一、jQuery事件 常用事件 blur([[data],fn]) 失去焦点 focus([[data],fn]) 获取焦点( 搜索框例子) change([[data],fn]) 当select下拉框中的元素发生改变的时候触发change事件(select例子) click([[data],fn]) 点击 dblclick([[data],fn])…

JavaFX列表示例

这是使用JavaFX构建的示例列表应用程序。 该应用程序是待办事项列表。 此应用程序具有添加,更新和删除列表中项目的功能。 列表数据存储在HSQLDB关系数据库中。 该应用程序使用JDBC(Java数据库连接)API访问数据库。 该应用程序打包为可执行JA…

flex弹性布局操练2

上一个是练习的1个内元素的,这次练习两个元素的。 ul.box1 {list-style:none;background-color:black;display:flex;justify-content:space-between;/*水平轴的位置,默认是flex-start就是第一种情况*/align-items:center;/*垂直轴的位置*/width:100px;height:100px;…

Selenium1 Selenium2 WebDriver

内容摘要: Selenium 1 原理WebDriver WebDriver 组件WebDriver 协议 Remote End 处理流程Commands & Endpoints & 请求路由错误消息 WebDriver 配置 Selenium 2 1、Selenium 1 原理 (1).测试用例(Testcase)通过Client Lib的接口向Se…

Fork / Join框架vs并行流vs.ExecutorService:最终的Fork / Join基准

Fork / Join框架在不同配置下如何工作? 就像即将上映的《星球大战》一样,围绕Java 8并行性的批评也充满了兴奋。 并行流的语法糖带来了一些炒作,就像我们在预告片中看到的新型光剑一样。 现在,有了许多使用Java进行并行处理的方法…

CSRF攻击与防御

CSRF是什么 CSRF在百度百科中是这么说的:“CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本&a…

Silverlight学习笔记(九)-----RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】...

RenderTransform特效: 变形(RenderTransform)类是为了达到直接去改变某个Silverlight对象的形状(比如缩放、旋转一个元素)的目的而设计的,RenderTransform包含的变形属性成员就是专门用来改变Silverlight对…

React 篇 Search Bar and content Table

我们要构建一个模块,其中包含一个内容显示的表格,然后上面有一个提供Search的栏位,并对Search中输入栏进行监听,当有改变的时候,触发Search然后对内容表中的内容进行过滤。 Demo Link:http://czrmodel.mybluemix.net/…

PrimeFaces:在动态生成的对话框中打开外部页面

我已经在即将出版的PrimeFaces Cookbook 2版中写了一篇关于食谱的博客。 在这篇文章中,我想发表第二篇关于一个名为Dialog Framework的小型框架的文章。 我个人喜欢它,因为我记得我为使用Struts框架付出同样的努力而付出的代价。 当您想将外部页面加载到…

vue-router之 beforeRouteEnter

beforeRouteEnter在每次路由切换都执行 ,而项目优化后,切换路由mounted只在最开始执行一次beforeRouteEnter的具体用法可参考官方文档 https://cn.vuejs.org/v2/guide/migration-vue-router.html#activate-替换 需要注意的是:在这期间路由跳转携带的数据发生改变会影…

突破极限–如何将AeroGear Unified Push用于Java EE和Node.js

在2014年底的AeroGear队宣布红帽的JBoss统一推送服务器的可用性xPaaS 。 让我们仔细看看! 总览 统一推送服务器允许开发人员将本地推送消息发送到Apple的推送通知服务(APNS)和Google的云消息传递(GCM)。 它具有一个内…

js 获取json数组里面数组的长度

作为一个前端页面开发者第一次处理json数据,遇到了‘js 获取json数组里面数组的长度’?竟然不知道 json没有.length属性(真是要嘲讽下自己),少壮不努力老大徒伤悲啊!以前都是去寻求男朋友帮助,但…

针对WildFly和EAP运行Java Mission Control和Flight Recorder

Java Mission Control (JMC)使您可以监视和管理Java应用程序,而无需引入通常与这些类型的工具相关的性能开销。 它使用为正常的JVM动态优化而收集的数据,从而形成了一种非常轻量级的方法来观察和分析应用程序代码中的问题。 JMC由…

C#堆栈和堆的讲解

OS和CLR通常将用于容纳数据的内存划分为两个独立的区域,每个区域都采用截然不同的方式来管理:堆栈(Stack)和堆(heap)。(1) 调用一个方法时,它的参数以及它的局部变…