写点什么

用 Java 开发 Web 应用,替代方案研究

  • 2019-06-06
  • 本文字数:1701 字

    阅读完需:约 6 分钟

用Java开发Web应用,替代方案研究

随着编译到 JavaScript 语言的日益普及,对于熟悉 Java 虚拟机(JVM)语言并希望开发 Web 应用程序但不想掌握复杂的 JavaScript 开发技术栈的开发人员来说,他们有了越来越多的 JavaScript 替代方案可选择。最近发布的对使用 GWT、TeaVM、JSweet、CheerpJ、Vaadin Flow 框架搭建的应用程序性能和有效负载特性的分析表明,与原生 JavaScript Web 应用程序相比,它们的性能差距正在缩小。


Java 开发人员Renato Athaydes最近对JVM替代方案和JavaScript进行了比较。作为比较参照物的目标应用程序是一个简单的计数器,它使用React JavaScript 前端库实现:



这个计数器应用程序分别使用GWTTeaVMJSweetCheerpJVaadin Flow五种 Java 框架实现。这五种 Java 替代方案和原生 JavaScript 应用程序之间的比较遵循了一种简单的方法论:使用 Java 或框架提供的最基本的工具创建计数器应用程序,然后测量应用程序的大小和性能。应用程序大小通过浏览器的网络(Network)选项卡获取(计算所有类型的资源,避免偏向依赖大量非 JavaScript 资源的框架)。利用谷歌 Chrome 内置的Lighthouse审计工具来衡量性能。 LightHouse 的性能分数根据六个加权指标进行评估,这六个指标按照重要程度排序为:可交互时间速度指标首次内容绘制首次CPU空闲首次有效绘制预计输入延迟时间


根据 Lighthouse 的报告,JSweet 和 TeaVM 在首次内容绘制(First Contentful Paint,FCP)测量上击败了原生 JavaScript React 应用程序。谷歌报告表明,首次内容绘制是“测量从请求页面到浏览器渲染 DOM 第一个比特位的时间。这对用户来说是一个重要的里程碑,因为它提供了页面实际加载的反馈”。虽然大多数框架都获得了 LightHouse 评定为良好的全局性能分数(> 90,最高为 100),但是与其他框架相比,CheerPJ 性能表现不佳。



在很大程度上,我们可以通过生成的 JavaScript 大小来解释 Java 框架排名结果:



Java 框架按照生成 JavaScript 大小从小到大的顺序排列,和上述按照性能排列顺序相同。能得出这样的结果是意料之中的,因为浏览器解析生成 JavaScript 的时间与大小成正比,与性能成反比。


该项研究不包括J2CL,J2CL 是谷歌最近推出的Java到JavaScript转换器。此外,该研究依托于一个简单的 Web 应用程序。虽然测评结果不能推广到大型 Web 应用程序,但它仍然可以用于分析该项研究中涉及的 Java 框架之间的差异。


例如,CheerPJ 的大尺寸和糟糕的性能可以用这样一个事实来解释:它不是一个真正的 Java 到 JavaScript 的转换器,因为它将完整的 Java 运行时发送给了浏览器。从好的方面来说,CheerPJ 允许开发人员使用已编译且包含 Swing 应用程序的 jar,无需插件直接在浏览器中运行。


GWT(2006 年发布)是一种成熟的开源技术,谷歌广告就使用了 GWT。 GWT 附带了一系列用于界面构建的小部件和面板。


TeaVM 声称是 Java 字节码的前置编译器,它可以在浏览器中运行 JavaScript 和WebAssembly。 TeaVM 不需要源代码,只需要编译后的类文件,而且不要求源代码是 Java 编写的,因此 TeaVM 可以编译KotlinScala


Jsweet 自称是 Java 到 TypeScript/JavaScript 的转换器,具有 1000 多个 Java 可用的 JavaScript 库。 Jsweet 声称允许开发人员使用 JavaScript 访问使用 Java 生成的 API/对象,而无需额外的工具或运行时。然而,Jsweet 并不能完全模拟 Java。在某种程度上,可能需要修改现有的 Java 应用程序,特别是那些使用 Java 特定 API 编写的应用程序,如用于用户界面的 Swing。


Vaadin Flow 是一组用于使用 Java 构建 Web 应用程序的组件和工具。 Vaadin Flow 提供了内置的Spring支持,支持 WebSocket 的自动服务器端到客户端通信。 Web 应用程序可以用纯 Java 编写,也可以用 Java 和 HTML 混合编写。 Vaadin 的组件自称是移动优先的 Web 组件,可针对 UX、性能及可访问性进行微调。但是,Vaddin Flows 会向浏览器发送一个压缩后大小超过“300k(不管应用程序大小)”的客户端引擎。后者解释了 Vaadin Flow 性能曲线的表现。


该研究方法论的灵感来源于 InfoQ之前报道的博文“前端框架的实现比较“。


查看英文原文Writing Web Applications in Java - a Study of Alternatives


2019-06-06 08:0016767
用户头像

发布了 308 篇内容, 共 203.0 次阅读, 收获喜欢 599 次。

关注

评论 1 条评论

发布
用户头像
ZK都不参与对比吗,虽然它是半商业半开源的。https://blog.csdn.net/daquan198163/article/details/9304897
2019-06-06 08:53
回复
没有更多了
发现更多内容

我与消息队列的八年情缘

勇哥java实战分享

RocketMQ 消息队列 Activemq

官方线索|Gitee2021程序员节特别活动

穿过生命散发芬芳

1024我在现场

Apache APISIX 2.10.0 正式发布,带来第一个 LTS 版本!

API7.ai 技术团队

开源 API网关 APISIX Apache APISIX

官方线索|2021 长沙·中国 1024 程序员节

穿过生命散发芬芳

1024我在现场

官方线索|第二届1024国际智能投研开发者大会

穿过生命散发芬芳

1024我在现场

Java常用容器笔记

风翱

java 10月月更

官方线索|鸿蒙1024程序员节

轻口味

1024我在现场

和12岁小同志搞创客开发:如何驱动红外遥控器?

不脱发的程序猿

少儿编程 DIY 红外遥控器 创客开发

这篇博客和你唠唠 python 并发,滚雪球学python第四季,第16篇

梦想橡皮擦

10月月更

官方线索|2021 长沙·中国 1024 程序员节

耳东@Erdong

1024我在现场 10月月更

在线中文繁简体转换工具

入门小站

工具

Apache APISIX 社区周报 | 2021 10.1-10.14

API7.ai 技术团队

开源社区 API网关 APISIX 社区周报 Apache APISIX

架构:微内核架构(Microkernel Architecture)二

程序员架构进阶

架构 规则引擎 微内核架构 OSGi 10月月更

golang和java的性能对比及golang内存管理

hanaper

官方线索|【云+社区】程序员过节指南:如何玩转你的1024 ?

Regan Yue

1024 1024我在现场

竞跑加速! 数字人民币场景全覆盖

CECBC

Android开发中遇到加载有相同函数的so库时的问题

轻口味

10月月更

线程池处理批量接口请求实践

FunTester

线程池 性能测试 接口测试 测试框架 FunTester

【设计模式】第三篇-单例模式

Brave

设计模式 单例模式 10月月更

网站性能优化的实战指南

devpoint

html 性能优化 10月月更

官方线索|CCF CED 中国工程师文化日

穿过生命散发芬芳

1024我在现场

Golang网络编程

CodeWithBuff

golang 网络编程 Go 语言 web socket

基于分布式认知工业互联网的汽车零部件质量溯源平台

CECBC

SQL注入进阶篇一php代码审计

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

数字货币已被世界公认,中国市场即将爆发

CECBC

技术人在职场应该知道的沟通技巧

baiyutang

沟通模型 10月月更

不了解Zookeeper的童鞋看过来哦~

Regan Yue

zookeeper 10月月更

官方线索|RTE2021 实时互联网大会

穿过生命散发芬芳

1024我在现场

linux之sed使用技巧

入门小站

Linux

【Flutter 专题】27 图解 ListView/GridView 混用时滑动冲突小尝试

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

从转移工具到移动急救室,5G救护车给行业带来了什么变化?

脑极体

用Java开发Web应用,替代方案研究_语言 & 开发_Bruno Couriol_InfoQ精选文章