Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Performance page #2122

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion _includes/header-navigation.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@
<ul class="submenu">
<li><a href="{{site.baseurl}}/about" class="{% if page.url contains '/about/' %}active{% endif %}">WHAT IS QUARKUS?</a></li>
<li><a href="{{site.baseurl}}/container-first" class="{% if page.url contains '/container-first/' %}active{% endif %}">CONTAINER FIRST</a></li>
<li><a href="{{site.baseurl}}/continuum" class="{% if page.url contains '/continuum/' %}active{% endif %}">VERSATILITY</a></li>
<li><a href="{{site.baseurl}}/performance" class="{% if page.url contains '/performance/' %}active{% endif %}">PERFORMANCE</a></li>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did you move the continuum page to the end, and put performance here?

<li><a href="{{site.baseurl}}/developer-joy" class="{% if page.url contains '/developer-joy/' %}active{% endif %}">DEVELOPER JOY</a></li>
<li><a href="{{site.baseurl}}/kubernetes-native" class="{% if page.url contains '/kubernetes-native/' %}active{% endif %}">KUBERNETES NATIVE</a></li>
<li><a href="{{site.baseurl}}/standards" class="{% if page.url contains '/standards/' %}active{% endif %}">STANDARDS</a></li>
<li><a href="{{site.baseurl}}/continuum" class="{% if page.url contains '/continuum/' %}active{% endif %}">REACTIVE</a></li>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, we definitely don't want to have REACTIVE here, the page is NOT about reactive.

</ul>
</li>
<li class="dropdown">
Expand Down
30 changes: 18 additions & 12 deletions _includes/homepage-features-icon-band.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@ <h3><a href="/container-first">Container First</a></h3>
<p>Quarkus tailors your application for GraalVM and HotSpot. Amazingly fast boot time, incredibly low RSS memory (not just heap size!) offering near instant scale up and high density memory utilization in container orchestration platforms like Kubernetes. We use a technique we call compile time boot.</p>
</div>
<div class="width-4-12 width-12-12-m contrib-block">
<img class="light-only" src="{{site.baseurl}}/assets/images/about/icon-reactive.svg">
<img class="dark-only" src="{{site.baseurl}}/assets/images/about/icon-reactive-dark.svg">
<h3><a href="/continuum">Reactive Core</a></h3>
<p>Built on a robust reactive core, Quarkus ensures fast and efficient performance, supporting the development of a wide variety of modern applications.</p>
<img class="light-only" src="{{site.baseurl}}/assets/images/performance/icon-performance.svg">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not have put performance in the second item, on the second line.

I know it's a core strength, but, that's not going to attract lots of developers (otherwise, many languages would not be as popular as they are...).

<img class="dark-only" src="{{site.baseurl}}/assets/images/performance/icon-performance-dark.svg">
<h3><a href="/performance">Performance</a></h3>
<p>Quarkus streamlines framework optimizations in the build phase to reduce runtime dependencies and improve efficiency. By precomputing metadata and optimizing class loading, it ensures fast startup times for JVM and native binary deployments, cutting down on memory usage.</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hum, this is semantically equivalent to the last sentence of the container feature.

</div>
<div class="width-4-12 width-12-12-m contrib-block">
<img class="light-only" src="{{site.baseurl}}/assets/images/about/icon-standards.svg">
<img class="dark-only" src="{{site.baseurl}}/assets/images/about/icon-standards-dark.svg">
<h3><a href="/standards">Community and Standards</a></h3>
<p>Quarkus provides a cohesive, fun to use, full-stack framework by leveraging a growing list of over fifty best-of-breed libraries that you love and use. All wired on a standard backbone.</p>
<img class="light-only" src="{{site.baseurl}}/assets/images/about/icon-developerjoy.svg">
<img class="dark-only" src="{{site.baseurl}}/assets/images/about/icon-developerjoy-dark.svg">
<h3><a href="/developer-joy">Developer Joy</a></h3>
<p>A cohesive platform for optimized developer joy with unified configuration and no hassle native executable generation. Zero config, live reload in the blink of an eye and streamlined code for the 80% common usages, flexible for the remainder 20%.</p>
</div>
<div class="width-4-12 width-12-12-m contrib-block">
<img class="light-only" src="{{site.baseurl}}/assets/images/about/icon-kube-native.svg">
Expand All @@ -30,10 +30,16 @@ <h3><a href="/kubernetes-native">Kube-Native</a></h3>
<p>The combination of Quarkus and Kubernetes provides an ideal environment for creating scalable, fast, and lightweight applications. Quarkus significantly increases developer productivity with tooling, pre-built integrations, application services, and more.</p>
</div>
<div class="width-4-12 width-12-12-m contrib-block">
<img class="light-only" src="{{site.baseurl}}/assets/images/about/icon-developerjoy.svg">
<img class="dark-only" src="{{site.baseurl}}/assets/images/about/icon-developerjoy-dark.svg">
<h3><a href="/developer-joy">Developer Joy</a></h3>
<p>A cohesive platform for optimized developer joy with unified configuration and no hassle native executable generation. Zero config, live reload in the blink of an eye and streamlined code for the 80% common usages, flexible for the remainder 20%.</p>
<img class="light-only" src="{{site.baseurl}}/assets/images/about/icon-standards.svg">
<img class="dark-only" src="{{site.baseurl}}/assets/images/about/icon-standards-dark.svg">
<h3><a href="/standards">Community and Standards</a></h3>
<p>Quarkus provides a cohesive, fun to use, full-stack framework by leveraging a growing list of over fifty best-of-breed libraries that you love and use. All wired on a standard backbone.</p>
</div>
<div class="width-4-12 width-12-12-m contrib-block">
<img class="light-only" src="{{site.baseurl}}/assets/images/about/icon-reactive.svg">
<img class="dark-only" src="{{site.baseurl}}/assets/images/about/icon-reactive-dark.svg">
<h3><a href="/continuum">Unifies imperative and reactive</a></h3>
<p>Combine both the familiar imperative code and the reactive style when developing applications.</p>
</div>
</div>
</div>
64 changes: 64 additions & 0 deletions _includes/performance.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<div class="full-width-bg component">
<div class="grid-wrapper">
<div class="width-3-12 width-12-12-m img-vert-center">
<img class="light-only" src="{{site.baseurl}}/assets/images/performance/icon-performance.svg" alt="Performance icon">
<img class="dark-only" src="{{site.baseurl}}/assets/images/performance/icon-performance-dark.svg" alt="Performance icon">
</div>
<div class="width-9-12 width-12-12-m">
<h2>The Quarkus Way</h2>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HTML makes reviewing very hard. Could you try the technique I used for continuum?

<p>Quarkus redefines Java development by shifting work to the build phase. This approach minimizes runtime dependencies, maximizes dead code elimination, and introduces clear metadata contracts, resulting in leaner and more efficient applications.</p>
<p>The Quarkus approach helps to "strip out" all code which is only necessary to validate the user model</p>
<ul>
<li>compile classes or apply bytecode enhancements</li>
<li>introspect in the model</li>
<li>parse of framework configuration files</li>
<li>discover extensions and services, or “apply auto-configuration"</li>
</ul>
<p>All that code is run only during the compilation phase; the classes don't even get loaded when the app is started. This means the JIT can make much better optimisations, and spend less memory in doing so.</p>
<p>By performing these optimizations at build time, Quarkus ensures that the heavy lifting is done once, not at every startup, reducing memory usage and startup time.</p>
<p>This approach benefits both GraalVM native images and traditional HotSpot JVM deployments, leading to faster, smaller, and more resource-efficient Java applications.</p>
</div>
<div class="width-3-12 width-12-12-m img-vert-center">
<img class="light-only" src="{{site.baseurl}}/assets/images/performance/icon-memory.svg" alt="Memory icon">
<img class="dark-only" src="{{site.baseurl}}/assets/images/performance/icon-memory-dark.svg" alt="Memory icon">
</div>
<div class="width-9-12 width-12-12-m">
<h2>Reduced Memory</h2>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be h3 - it's part of the quarkus way, which actually is named" build-time principle.

<p>Quarkus reduces memory utilization for both traditional JVM deployments as well as native binaries using Ahead-of-Time (AOT) Compilation with GraalVM. In a traditional architecture many classes are loaded into memory, only to be pruned out later. Quarkus is able to avoid this wasted classloading. Quarkus also leverages build-time metadata processing, lowering memory consumption during execution.</p>
</div>
<div class="width-3-12 width-12-12-m img-vert-center">
<img class="light-only" src="{{site.baseurl}}/assets/images/performance/icon-startup.svg" alt="Startup icon">
<img class="dark-only" src="{{site.baseurl}}/assets/images/performance/icon-startup-dark.svg" alt="Startup icon">
</div>
<div class="width-9-12 width-12-12-m">
<h2>Fast Startup Time</h2>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same, h3

<p>Quarkus delivers fast startup times that allow for automatic scaling up and down of microservices on containers or Kubernetes deployments. It achieves fast startup times by performing build-time processing for both JVM and native binary deployments, reducing the work done during runtime. Quarkus precomputes metadata and optimizes class loading, significantly cutting down on initialization time. For example, some frameworks do “auto-wiring” to external dependencies by attempting to load many possible implementations, using Java Reflection APIs. Quarkus is able to pre-wire in the dependency and bypass this rather slow process.</p>
<p> For natively compiled binaries, Quarkus uses GraalVM to eliminate startup overhead resulting in near-instant startup times by running directly as a native executable.</p>
</div>
<div class="width-3-12 width-12-12-m img-vert-center">
<img class="light-only" src="{{site.baseurl}}/assets/images/performance/icon-throughput.svg" alt="Throughput icon">
<img class="dark-only" src="{{site.baseurl}}/assets/images/performance/icon-throughput-dark.svg" alt="Throughput icon">
</div>
<div class="width-9-12 width-12-12-m">
<h2>Higher Throughput</h2>
<p>Doing more work upfront at build time doesn’t just improve memory footprint and startup times. It also makes normal program execution faster. How? The output of a Quarkus build process is JIT-friendly, which means the JIT can make better optimizations, and get the application to a super-optimized state faster. For example, because there’s less unused bytecode in a Quarkus application, the JIT can inline more effectively. Early elimination of unused classes also enables the JVM to use monomorphic method dispatching, instead of the much slower megamorphic method dispatching. Megamorphic dispatching is necessary when there are several implementations of the same interface present on the classpath.</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not the reason, it's only a sub-part of the reason. The main reason is the reactive core. This is great, but as the cherry on the top, the cake is the reactive core.

</div>
<div class="width-3-12 width-12-12-m img-vert-center">
<img class="light-only" src="{{site.baseurl}}/assets/images/performance/icon-diskspace.svg" alt="Disk footprint icon">
<img class="dark-only" src="{{site.baseurl}}/assets/images/performance/icon-diskspace-dark.svg" alt="Disk footprint icon">
</div>
<div class="width-9-12 width-12-12-m">
<h2>Disk Footprint</h2>
<p>Quarkus reduces the footprint of Java applications by employing build-time processing to eliminate unnecessary runtime dependencies and by optimizing the application’s deployment artifacts. It packages only the essential classes and resources needed at runtime, removing unused code through techniques like dead code elimination. When using GraalVM for native compilation, Quarkus further reduces the footprint by compiling the application into a compact native binary, stripping out the JVM and related dependencies.</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would hide this.

Our disk footprint is 10 times bigger than the equivalent Go application.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(and compressing native executable comes with a cost)

<p>Traditionally, when optimizing software performance, there is often a tradeoff between throughput and memory footprint, or between startup time and eventual throughput. In contrast, many of the Quarkus optimizations, such as dead code elimination, improve multiple aspects of application performance. The Quarkus way eliminates wasted work and results in a leaner application which both starts fast and runs fast, all while consuming less memory.</p>
</div>
<div class="width-12-12 width-12-12-m">
<h2>Related Links</h2>
<p><a href="https://quarkus.io/blog/reactive-crud-performance-case-study/">"Reactive CRUD Performance: A Case Study" Blog Post</a><br>
<a href="https://quarkus.io/guides/performance-measure">"Measuring Performance" guide</a>
</p>
</div>
</div>
</div>


7 changes: 7 additions & 0 deletions _layouts/performance.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
layout: base
---

{% include title-band.html %}

{% include performance.html %}
8 changes: 8 additions & 0 deletions _sass/quarkus.scss
Original file line number Diff line number Diff line change
Expand Up @@ -962,3 +962,11 @@ li {
.bkg-grey {
background-color: $grey-1;
}


/// image center

.img-vert-center {
display: flex;
justify-content: center;
}
Binary file removed assets/images/performance/buildtime_graphic.png
Binary file not shown.
35 changes: 35 additions & 0 deletions assets/images/performance/icon-diskspace-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
35 changes: 35 additions & 0 deletions assets/images/performance/icon-diskspace.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading