阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

用 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:0016382
用户头像

发布了 259 篇内容, 共 148.6 次阅读, 收获喜欢 577 次。

关注

评论 1 条评论

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

产业互联网业务与团队的思考

陈俊

阿里一线架构师甩出“源码阅读指南”,从源码到实战,一键搞定

比伯

Java 编程 程序员 架构 计算机

《程序员修炼之道》- 务实的方法(5)

石云升

程序员 28天写作 评估工作量

【Linux系统】关于守护进程

程序员架构进阶

Linux 架构 守护进程 28天写作

面试学习!月薪20k+的Android面试都问些什么?终获offer

欢喜学安卓

android 程序员 面试 移动开发

半导体芯片小白基础知识(2) (28天写作 Day23/28)

mtfelix

集成电路 28天写作 晶圆 光刻机 晶圆代工

故乡的年

熊斌

28天写作

真正牛逼的人,都是极简主义者!!

冰河

产品 程序 极简主义

面试官问:ZooKeeper是强一致的吗?怎么实现的?

Java 编程 程序员 面试 分布式

Mybatis【16】-- Mybatis多对一关联查询

秦怀杂货店

数据库 mybatis

学习JAVA8个月,成功跳槽,外包进阿里成功定级P7,太牛了!

Java 编程 程序员 面试

架构师训练营第 2 期 第 8 周 作业一

老腊肉

架构师训练营第2期

产品经理训练营笔记-产品思维和产品意识(下)

.nil?

产品经理训练营

设计模式: 工厂模式

爱笑的小雨

设计模式 23种设计模式 Java设计模式

奇葩java迭代器笔试题,做对算你厉害

田维常

迭代器模式

30+程序员竞争力从哪里来?

我心依然

程序员 竞争力

真狠!涵盖了Netty+Spark+Hadoop+分布式五部分!讲的清清楚楚!

996小迁

redis hadoop 架构 面试 Netty

传统线程互斥技术 synchronized

武哥聊编程

Java 多线程 synchronized 28天写作

深入浅出Android!阿里P7深入Binder原理讲解,论程序员成长的正确姿势

欢喜学安卓

android 程序员 面试 移动开发

设计模式简单讲 - 适配器设计模式

小马哥

Java 设计模式 架构师 七日更

蚂蚁金服二面被血虐,鬼知道面试的我经历了什么?

Java架构之路

Java 程序员 架构 面试 编程语言

Java学习笔记整理:Spring+tomcat+Kafka+多线程面试笔记

Java架构之路

Java 程序员 架构 面试 编程语言

BAT面试Spring全家桶:Spring+SpringBoot+SpringCloud+SpringMVC

Java架构之路

Java 程序员 架构 面试 编程语言

JVM笔记 -- Java跨平台和JVM跨语言

秦怀杂货店

JVM JVM笔记

《小狗钱钱》读书笔记

架构精进之路

读书笔记 七日更 28天写作

Redis击穿、穿透、雪崩产生原因以及解决思路

Java架构师迁哥

成长篇-结构思考力笔记(完整版)

小诚信驿站

程序员 刘晓成 小诚信驿站 成长笔记 28天写作

贪心算法

en

算法 贪心算法

“复制”马斯克(三):我们要为他的“反智事业”买单吗?

脑极体

阿里内部Redis宝典意外流出极致经典:源码+实战+理论

比伯

Java 编程 程序员 架构 面试

webpack | 谈谈webpack的本质

梁龙先森

大前端 webpack 28天写作

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