The main goal was to take an out of the box Faces (formerly JSF) application (PrimeFaces Showcase) and run it in both a Java EE Server and in Quarkus. Some addition goals:
- See how much we can improve performance by incorporating various optimization tricks for JSF applications
- See if Quarkus is a viable option for Faces and migrating to Docker containers
- OpenJDK 17.0.5
- JBoss Wildfly 18.0.1
- Quarkus 2.16.3.Final
- JSF Production Mode
- Intel(R) Core(TM) i7-8750H CPU @2.21 GHz 16GB RAM
- Apache MyFaces (Quarkus) instead of Jakarta Mojarra (Wildfly)
- PrimeFaces MOVE_SCRIPTS_TO_BOTTOM
- OmniFaces GzipResponseFilter
- OmniFaces CombinedResourceHandler
- PrimeFaces Extensions CombinedResourceHandler Helper
- jQuery Hide Page Until Complete
The following client and server metrics were captured while hitting the exact same page /datatable/crud.xhtml
Using Incognito Mode
and pressing CTRL+F5 so it forced the browser to load all resources from the server with nothing cached.
Metric | WildFly EE | Quarkus (DEV) | Quarkus (JVM) | Quarkus (GraalVM) |
---|---|---|---|---|
Package Size | 48.5 MB WAR | N/A | 91 MB | 206 MB |
Cold Startup | 10.3 s | 8.092 s | 3.847 s | 0.035 s |
Memory Used | 140 MB | 113 MB | 40 MB | 13.6 MB |
HTTP Requests | 80 | 80 | 61 | 61 |
Resource Size | 2.4 MB | 2.4 MB | 2.4 MB | 2.4 MB |
Transferred Size | 2.4 MB | 2.4 KB | 888 KB | 888 KB |
DOM Loaded | 1150 ms | 1750 ms | 918 ms | 580 ms |
Lighthouse Score | 59/100 | 72/100 | 97/100 | 98/100 |
First Paint | 2.4 s | 2.3 s | 0.8 s | 0.8 s |
Speed Index | 2.4 s | 2.3 s | 1.0 s | 0.8 s |
Time To Interactive | 3.9 s | 2.3 s | 0.9 s | 0.8 s |
Largest Paint | 2.7 s | 2.6 s | 1.1 s | 1.0 s |
To run the example in Dev mode:
git clone https://github.com/melloware/quarkus-faces
cd quarkus-faces
mvn -Pqdev
Then open your web browser to https://localhost:8081/
To run the example in HotSpot Production mode:
git clone https://github.com/melloware/quarkus-faces
cd quarkus-faces
mvn clean package
java -jar target/quarkus-app/quarkus-run.jar
Then open your web browser to https://localhost:8080/
Builds a Docker image running as a standard JVM application.
mvn clean package -Ddocker
docker run -i --rm -p 8081:8081 melloware/quarkus-faces:latest
Builds a native Docker image running as a GraalVM (Mandrel) application.
mvn -Pnative
docker run -i --rm -p 8081:8081 melloware/quarkus-faces:${version}
We have a WIKI page where we are keeping track of known issues while developing with Quarkus/MyFaces/PrimeFaces. Please feel free to contribute to that page if you find anything you think others should know!