GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

CheerpJ 2.0:使用 WebAssembly 将 Java 应用移植到浏览器

2020 年 4 月 15 日

CheerpJ 2.0:使用WebAssembly将Java应用移植到浏览器

LeaningTech最近发布了CheerpJ 的第二个主要版本。 CheerpJ 2.0 可以将 Java 应用程序转换为 HTML、WebAssembly和 JavaScript 的混合体,这样开发人员就可以在浏览器中运行 Java 应用程序(包括小程序),或者将 Java 库集成到 Web 应用程序中。 CheerpJ 2.0 使用 WebAssembly 提高运行时的速度。


在 WebAssembly 和 JavaScript 中,CheerpJ 2.0 提供了一个完整的(100%的 Java 8 语言)、模块化的、优化了的 Java 8 SE 运行时库。运行时由一组基于浏览器的各种不同功能的原生实现(例如,使用Web Worker的多线程、使用Web Audio的音频、基于IndexedDB的文件系统访问等等)来补充。 CheerpJ 2.0 全新地利用了 WebAssembly 的运行时模块,提高了运行时的速度,并减少了程序包的大小,同时降低了大量的计算成本(例如字体渲染)。


CheerpJ 之前的版本为一个简单的增量计数器应用程序就提供了超过1MB的JavaScript。 CheerpJ 2.0 通过仅交付运行时所需的组件来努力降低下载的大小。然而,在考虑了 Wasm 模块和等效的 JavaScript 模块在解析时间上的增加之后,CheerpJ 2.0 应用程序可能仍然会显示一个用户可感知的等待时间(从用户使用该应用程序时开始计时)。因此,CheerpJ 并不适用于开发人员的所有用例。 LeaningTech 的首席执行官 Stefano De Rossi 特别强调了 CheerpJ 不支持的目标(non-goal):


CheerpJ 不打算在从头开始编写 Web 应用程序(…),我们不认为 CheerpJ 是 Java 的 Blazor 等价物(…)


Rossi 详细介绍了 CheerpJ 努力解决的三个主要用例。第一个用例涉及到遗留 Java 应用程序和小程序(applet)的转换。由于可以在现代浏览器中分发、访问和使用,这些遗留应用程序的寿命可能会延长。Rossi 提到,数以百计的遗留教育 Java 小程序可能会从中受益。


第二个用例涉及到将现有的 Java 客户端迁移到基于浏览器的应用程序,保留现有的业务逻辑并将其转换为 JavaScript/WebAssembly,同时用 HTML 重写用户界面。在第三个用例中,开发人员可以转换现有的 Java 库并将其集成到 Web 应用程序中。


Rossi 在接受techUK的采访时,总结了与 WebAssembly 相关的优势:


多亏了 Wasm,我们才能制造出将原生桌面应用程序和移动应用程序转换为标准 Web 应用程序的编译器和转换工具,这些程序可以被任何带有浏览器的设备使用,而不管这些设备使用的是何种操作系统以及浏览器的供应商如何。

这意味着我们可以使用现有的 Java、Flash 或 C++应用程序,这些应用程序都是任务关键型的,并且都花费了数年的时间来开发;也意味着我们可以将它们自动地移植到 HTML5,而无需人工干预。

至关重要的是,编译到 WebAssembly 意味着我们的组织不再依赖远程执行和基于云的虚拟化来交付应用程序了。通过使用终端用户设备上的计算能力来运行应用程序,可以将维护和运行成本降到最低。


CheerpJ 是闭源的,但它可以免费用于非商业目的以及技术评估;其他用途可能需要许可证。开发人员可以使用在线平台编写 Java 代码,并在浏览器中实时渲染 Java 代码。


Leaning Technologies是一家计算机软件公司,专门从事 WebAssembly 和可编译为 JavaScript 的解决方案和工具的研究,以将应用程序转换为 Web 应用程序。Leaning Technologies 致力于为大型遗留应用程序提供一种自动化的、迁移低成本的、现代化的解决方案。


将 Java 应用程序编译为 Web 应用程序的其他解决方案包括GWT、 TeaVM、 JSweet、 Vaadin FlowJ2CL 等。 JWebAssembly开源项目当前正在开发一个 Java 字节码到 WebAssembly(Java-bytecode-to-WebAssembly)的编译器。


原文链接:


WebAssembly Used by Java-to-Web Compiler CheerpJ 2.0 to Port Java Applications to Browsers


2020 年 4 月 15 日 09:002346

评论

发布
暂无评论
发现更多内容

百篇已过,又是一个新篇章,谈谈感受吧

良知犹存

代码人生

拆解增长黑客之实战(二):留存与变现

懒杨杨

读书 增长 产品运营

报销发票抵扣工资的CTO,该不该? | 法庭上的CTO(5)

赵新龙

CTO 法庭上的CTO

数字经济跨越五个融合发展阶段,区块链正成为基础支撑结构

CECBC区块链专委会

数字经济

基于有限状态机与消息队列的三方支付系统补单实践

Java架构师迁哥

《Python深度学习》第二版重磅来袭——(Keras之父亲自编写)

计算机与AI

Redis 持久化方式-RDB

码农架构

redis redis持久化

算法训练营课程纲要

陈皓07

话题讨论 | 作为地地道道的程序员半年内都没摸过代码是什么样的体验?

xcbeyond

话题讨论

Bitmap为什么那么快?

Man

redis 中间件

第六周-作业1

Mr_No爱学习

面试被问线程安全怎么保障,我的回答让面试官眼前一亮

996小迁

Java 架构 面试 多线程

架构词典:语言

lidaobing

架构 语言

Spock单元测试框架实战指南四 - 异常测试

Java老k

Java 单元测试 spock

2. Spring早期类型转换,基于PropertyEditor实现

YourBatman

Spring Framework 类型转换 PropertyEditor

谷燕西:不需要银行的银行业务

CECBC区块链专委会

移动互联网

Redis 子进程开销监控和优化方式

码农架构

Redis开发与运维

5种分布式事务方案与阿里的 Seata 中间件

Bruce Duan

分布式事务 seata

排查指南 | 当 mPaaS 小程序提示“应用更新错误(1001)”时

蚂蚁集团移动开发平台 mPaaS

小程序 问题排查 mPaaS

国家计算机网络与信息安全管理中心官员:数字货币的风险仍需关注

CECBC区块链专委会

信息安全

S型曲线不止关乎身材?|技术人应知的创新思维模型(2)

Alan

创新 思维模型

第六周-学习总结

Mr_No爱学习

生产环境压测建设历程之三 淘宝网2009年的痛

数列科技杨德华

第十一周作业

solike

《前端算法系列》数组去重

徐小夕

Java 面试 算法 前端

Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

newbe36524

.net core ASP.NET Core dotnet

甲方日常 64

句子

工作 随笔杂谈 日常

警察营救安徽望江县17岁女生跳河自尽过程中,现场看热闹的旁观者们在做什么?

wbliu85

「生产事故」MongoDB复合索引引发的灾难

Kerwin

数据库 mongodb

读写分离这个坑,你应该踩过吧?

楼下小黑哥

MySQL 主从同步 读写分离

Windows下MySQL无法启动万能解决方案

MySQL从删库到跑路

MySQL

DNSPod与开源应用专场

DNSPod与开源应用专场

CheerpJ 2.0:使用WebAssembly将Java应用移植到浏览器-InfoQ