夸克浏览器_关于夸克的思考

2023-11-10 22:50
文章标签 思考 浏览器 夸克

本文主要是介绍夸克浏览器_关于夸克的思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

夸克浏览器

夸克浏览器

Quarkus,新的“超音速,亚原子” Java框架目前正受到广泛关注。 对于企业Java的未来而言,此构建和运行时工具背后的思想确实比我们感兴趣。 使用Quarkus有什么好处和缺点?

摆脱动力

Quarkus认为,在容器化的世界中,企业Java运行时的大多数动态并不是真正需要的。 在将应用程序构建到容器映像之后,通常不应更改其功能。 企业容器带来的所有动态都允许使用功能强大且灵活的编程和部署模型,但是一旦在容器中启动了我们的应用程序,它们通常将不再更改。

Quarkus采取的方法是定制仅包含您的应用程序所需内容的运行时,并简化企业运行时的大部分动态。 企业Java代码在很大程度上依赖于控制反转(IoC),也就是“不给我们打电话,我们给您打电话”。 想依赖注入的ALA @Inject ,HTTP与资源@Path@GET ,或与事件观察家@Observes 。 我们的开发人员以声明方式指定应该发生的情况,并确保实现。 这允许非常高效的编程模型,但在运行时也会带来繁重的工作,因为有人必须将所有这些松散的末端放在一起。 现在,我们的想法是,如果我们的应用程序不应该在运行时发生变异,那么这些动态中的大多数都可以在构建时解决。 然后,生成的代码可以主要由直接调用组成; 所有的魔法都被烧掉了。

现在,这是过去(从今天看来)不支持IoC且需要直接调用代码中功能的笨重的企业框架所实现的结果吗? 从开发人员的角度来看,一点也不。 在我们的代码中,我们仍然使用相同的有效声明式方法,相同的注释。 构建过程负责将动力带回现实。

Quarkus还支持使用GraalVM构建本机可执行文件。 通过这种方法,我们使用提前(AOT)编译将应用程序预先构建并编译为本机可执行文件,而这些本机可执行文件无需动态扫描所有类并将其加载到JVM中。 与常规JVM相比,生成的可执行文件启动速度非常快,并且具有较低的资源消耗。

标准的力量

在Quarkus上,我发现最吸引人的是它基于已知的企业标准(例如CDI,JAX-RS等)构建。 我们可以通过本机可执行文件或Java运行时,在优化的运行时中运行应用程序,而不是使用成熟的应用程序服务器。

许多起义企业框架要求开发人员再次学习新的API,有时(有时有时更少)重新发明方向,例如如何实现REST端点。 但是,从开发人员和项目的角度来看,当现有的API和解决方案足够时,我看不到重新学习和重新编写应用程序的好处。 使用Quarkus采取的方法,开发人员可以编写和采用基于CDI,JAX-RS和JPA的应用程序,并通过将运行时更改为Quarkus对其进行优化。

企业Java扩展

除了Java Enterprise中包含的功能外,Quarkus还扩展了项目中可能需要的可用功能。 除了受支持的Java EE和MicroProfile规范外,还有用于响应消息传递的Quarkus扩展,Vert.x或Camel。 例如,可以通过@Inject EventBus Vert.x的EventBus类型。 这与我们在EE中习惯的开发人员经验相符。

我喜欢从已知的企业API开始,然后通过保持相同的声明性方法来扩展它们,以进一步满足应用程序的需求。

无服务器企业Java

Quarkus独特的卖点之一是在本地运行Java应用程序,它的启动时间非常短。 认真地说,几毫秒内开始的一切都会改变需求,我们需要快速启动和拆除我们的应用程序。

在几乎适用于所有Java的世界中,这仍然是最大的限制之一。 在性能方面,JVM需要大量时间来启动,更不用说预热HotSpot引擎并达到其全部吞吐量了。 相当公平,这是有原因的,因为运行时主要针对长时间运行的进程中的吞吐量进行了优化。 由于应用程序应该以快速启动为目标,以便用户可以等待它,因此以常规方式启动JVM根本不够。

提到的AOT编译方法使我们能够在将Java应用程序作为本机映像执行时编写它们。 通过这样做,我们使Java工作负载能够在“无服务器”环境中执行,在该环境中我们可以将工作负载扩展到零,并且能够快速启动,而不会以初始启动时间来惩罚用户。

但是,通常情况下,生活并不那么容易。 GraalVM不支持常规JVM的全部功能集,例如,它不以通常的方式支持Reflection,并且许多企业运行时都不会作为本机可执行文件开箱即用。

话虽如此,通过考虑到运行时的局限性来开发实现,在Red Hat的朋友们为Quarkus的开发付出了多少工作,这确实令人印象深刻。 只有这样,我们才能将这些部分结合起来并以本机方式运行Java Enterprise应用程序。 Quarkus应用程序还可以在正常的JVM上正常运行,至少在我看来,启动速度足够快(不到一秒钟)。

尽管对于Enterprise Java而言,这是个好消息,但从我的角度来看,要求将其缩放为零并Swift启动,但启动时间并不是全部。 尽管这一新的举动无疑很有趣,但是我们不应该忘记,绝大多数企业正在运行,并且很可能会继续运行较长时间的工作量。 但是,在运行时消除大多数“动态”的方法也对总体资源消耗产生积极影响,并且肯定是有希望的。

但是,在我看来,原生启动时间甚至不是最大的好处。

开发周转时间:“令人欣喜的编码”

Quarkus允许我们的开发人员以极快的热重载来修改和测试我们的业务代码。 Maven插件的quarkus:dev目标使我们能够更改和保存文件,框架可以自动方式重新加载类并在运行的应用程序内部交换行为。 我们可以在几毫秒后重新执行并测试更改的功能,这在人类的React时间内即刻完成。 开发周期和反馈循环的周转时间因此变得尽可能短。 正如我的朋友埃德森·柳永(Edson Yanaga)所说:“这是激发喜悦的编码”。 我完全同意。

总的来说,我非常喜欢短延迟。 我认为,应对延迟的口头禅是使许多Google服务使用起来令人愉悦。 通常,在编码时,我们希望获得并留在流程中。 开发人员的思考时间非常宝贵,我们不希望被这种流程打扰,而要等待几秒钟以上的时间; 否则,一个人会分神,拿另一杯咖啡,或更糟的是,在社交媒体上看,然后就会引起您的注意。

在我看来,最短的周转时间是Quarkus框架的最大优势。 但是,即使没有Quarkus,如果您使用现代的应用程序容器和某些工具,您也已经可以实现热重新部署时间,从而实现了保持流程顺畅的开发模式。 例如,Open Liberty可以在不到一秒钟的时间内部署应用程序,并且与WAD之类的工具结合使用时,我们可以真正缩短周转时间,如本视频所述。

关于集成测试的一些注意事项:很有帮助的是,整个Quarkus应用程序的快速启动使测试实际上更适合于在部署级别(而不是代码级别)进行集成测试。 即,使用应用程序的通信接口部署和端到端测试单个应用程序。 但是,构建时间缓慢的主要原因之一是测试阶段的运行时间长,每个阶段都会启动应用程序或应用程序的一部分。 单。 测试运行。 即使Quarkus提供的启动时间很短,一旦越来越多的测试场景成为管道的一部分,这种影响也会变得巨大。 通常,我们应该做的是在测试套件执行过程中定义一个或最多几个部署,在这些部署中,我们对应用程序进行端到端测试,而不必在这之间重新启动正在运行的被测应用程序。 无论我们使用Quarkus的功能进行测试,还是使用专门的测试项目来完善已启动的应用程序,这都无关紧要。

持续交付周转时间

GraalVM本机构建的缺点之一是该构建需要很长时间。 取决于您的机器三十秒或更长时间。 甚至比我们在Java世界中应该习惯的要更长的时间。 在我们的开发管道中,这意味着我们不想在每次代码更改时都执行本机构建,而仅在持续交付管道中执行。 即使如此,我们仍然需要考虑到这会减慢整体管道执行时间,否则可能会更快地执行。 遵循只构建应用程序一次并在交付生产之前对完全构建的应用程序进行全面测试的口号,这意味着端到端/系统/验收测试的周转时间也会增加。

除了本机可执行文件,Quarkus还支持精简部署工件,如精简JAR,它仅包含由我们开发的实际业务逻辑类。 Quarkus可以使用这种方法,因为它将库和我们自己的代码分开。 看一下构建的*-runner.jar的大小和内容。 实现和所需的库包含在lib/目录下。 就像常规的Java Enterprise应用程序一样,这使我们能够通过优化写时复制文件系统映像层来利用Docker的优势。 如果您对这些图像层有所了解,您会注意到在容器化的世界中这当然是有道理的。 容器映像的构建和传输时间也影响整个构建执行时间。 在这种情况下,精简部署工件可提供最佳体验。 根据我的经验,总体图像大小几乎没有关系; 重要的是我们可以多快地重建并重新传输实际更改的层。 即使使用微小的本机映像,与精简的部署工件相比,这些大小和时间仍要大几个数量级。

在项目中,我们需要在管道执行时间和容器启动时间之间进行权衡。 除了将规模缩减为零的方法外,部署方案还应使用某种形式的蓝绿色部署,以免用户无论如何都无法停机。 考虑到这一点,生产启动时间不再是问题,因为旧版本将始终保持活动状态,直到新版本准备推出为止。 如果您参与的企业项目具有足够的用户,因此不必考虑将比例缩放到零,而是将新版本快速交付生产,则精简部署工件的方法可能更适合。

当前限制

当前框架的限制之一是Quarkus尚不支持某些EE标准的全部集合。 例如,不支持EJB。 但是,支持事务,并且某些其他功能可以用Quarkus自己的功能代替。 一个例子是调度,其中Quarkus附带了自己的@Scheduled注释。 从我的角度来看,这似乎是一种合理的方法,可以尝试实现项目可能需要的功能并提供一个已经支持大多数必需功能的框架。

但是,Quarkus的发展非常Swift,所以让我们看看如何缩小这些差距。 同样,我相信这个框架看起来多么成熟和详尽,令人印象深刻。

Maven插件声明,尤其是如何在Quarkus文档中进行广告宣传,还有其他可以改进的地方。 很多人似乎都喜欢将大量XML放入其pom.xml ,但是我并不是很多。 我宁愿保持对Java应用程序关注点的清晰区分,而不是让Maven“构建一切”。 如果我们允许项目使用Maven的默认值,则将pom.xml内所需的LoC保持在最低限度,并由CI基础结构来处理最顶层的所有内容。 例如,使用Quarkus,您至少可以摆脱其大部分pom.xml定义,而仅在CI管道中定义和构建本机映像。 然后有可能将pom.xml稍微简化一下。

但是,该文档承诺将有一个本机CLI“即将推出”,这在我看来是有希望的。

结论

Quarkus将云原生企业Java提升到一个新的水平,并实现了以前不可能实现的方案,尤其是在应用程序启动时间方面。 如果您打算将规模缩小到零,那么这无疑是您想要研究的技术。

我非常喜欢Quarkus如何跟进一些技术以前采用的方法,将它们进一步发展,并提供一个单一的框架,而且只有一把伞。 这使开发人员可以轻松上手,使用他们可能已经熟悉的企业标准,例如CDI或JAX-RS。 在我看来,这是一个很大的好处:不是试图重塑企业世界,而是使用熟悉的技术,而是通过高度优化的实现。

作为开发人员,我发现AOT编译和其他JVM优化通常非常有趣。 您还可以查看OpenJ9 JVM及其优化。 将运行时与Quarkus应用程序的JVM执行模式结合起来可能会很有趣。

要获得“纯” Java EE的快速开发人员经验,您可以查看WAD以及如何将其集成到Docker中。

翻译自: https://www.javacodegeeks.com/2019/04/thoughts-quarkus.html

夸克浏览器

这篇关于夸克浏览器_关于夸克的思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/385796

相关文章

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器

zeroclipboard单个复制按钮和多个复制按钮的实现方法 最近网站改版想让复制代码功能在多个浏览器上都可以实现,最近看网上不少说我们的代码复制功能不好用的,我们最近将会增加代码高亮等功能,希望大家多多支持我们 zeroclipboard是一个跨浏览器的库类 它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的

微软正式推出 Spartan 斯巴达浏览器

作为用于替代 IE 浏览器的下一代继任者,微软的 Project Spartan 斯巴达浏览器可算是吊足了玩家们的胃口!如今,在最新的 Windows 10 Build 10049 版本起,它终于正式登场了。 斯巴达浏览器搭载了全新的渲染引擎、新的用户界面并集成了 Cortana 语音助手。功能上新增了稍后阅读列表、阅读视图、F12开发者工具、支持网页注释 (手写涂鸦),可以保存到 O

PC与android平板通过浏览器监控Verybot的视频

下面这个视频是PC与android平板通过浏览器监控Verybot的视频:           http://v.youku.com/v_show/id_XNjYzNzYyMTIw.html

搜狗浏览器打开CSDN博客排版错乱问题解决

之前发生过几次,不知道什么原因。 今天一直用着好好的,打开一个csdn连接,显示404,博文被删除了,于是就用百度快照打开试试,百度快照打开显示的排版很乱也没找到有用信息。 后面再浏览CSDN博客就排版错乱,显示一个大大二维码图片。 尝试删除IE缓存无效,使用谷歌浏览是好的。 基本锁定就是搜狗缓存导致的,于是找如何删除搜狗缓存   清除后恢复正常

240907-Gradio插入Mermaid流程图并自适应浏览器高度

A. 最终效果 B. 示例代码 import gradio as grmermaid_code = """<iframe srcdoc='<!DOCTYPE html><html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width" /><title>My static Spa

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示; 代码如下: Demo07.jrxml <?xml version="1.0" encoding="UTF-8"?><!-- Created with Jaspersoft Studio version 6.6.

【编程底层思考】详解Java的JUC多线程并发编程底层组件AQS的作用及原理

Java中的AbstractQueuedSynchronizer(简称AQS)是位于java.util.concurrent.locks包中的一个核心组件,用于构建锁和其他同步器。AQS为实现依赖于FIFO(先进先出)等待队列的阻塞锁和相关同步器提供了一套高效、可扩展的框架。 一、AQS的作用 统一同步状态管理:AQS提供了一个int类型的成员变量state,用于表示同步状态。子类可以根据自己

vite是如何实现依赖预构建的,浏览器为什么没有实现从node_modules查找依赖,vite开发环境解决了什么问题

浏览器的esmodule 为什么没有做从node_modules查找依赖项 浏览器是基于http请求的,node_modules中依赖项不可控,可能又会依赖很多的包,整个依赖图都需要加载的话很耗性能。 commonjs是运行在服务端的,以file形式读取文件,内部有规避机制。 依赖预构建 首先vite会找到对应的依赖,然后调用esbuild(对js语法进行处理的一个库),将其他规范的代码转换

浏览器工作原理(3)-TCP协议文件如何从服务器到浏览器

浏览器工作原理-TCP协议,文件如何从服务器到浏览器 本周继续学习浏览器工作原理及实践,本次内容来看一下TCP协议确保文件完整的送到至浏览器 First Page 是指页面加载到首次开始绘制的时长,而影响这个性能指标的一个重要原因是网络加载速度,网络传输协议无论使用http还是websocket,都是基于TCP/IP的,所以有必要了解一下TCP/IP,对于web的性能调优和问题定位都有很