Hi Lari, Thank you for the info!
It looks like we are already using grails-layout: https://github.com/gsartori/dueuno-elements/blob/feature/grails-7/buildSrc/src/main/groovy/dueuno-plugin.gradle Am I missing something? Gianluca Sartori -- https://dueuno.com On Tue, 16 Sept 2025 at 17:02, Lari Hotari <[email protected]> wrote: > > In Grails 7, the default layout engine for SiteMesh has changed. > > In the previous layout engine, the solution bypassed SiteMesh completely at > runtime as a performance optimization. I created the original optimized > implementation over 16 years ago in commit > https://github.com/apache/grails-core/commit/c2beeadf80a278e24526219ca8287fc3fcfc3f2b > (the very first revision). There were many later optimizations such as > https://github.com/apache/grails-core/commit/5b5944432aba84fa194b282d4457339ac86fa07a > to avoid the need to use a servlet filter for the view. > > The previous layout engine still exists in the code base and it can be used. > There are some comments about this implementation in 7.0.x source files: > https://github.com/apache/grails-core/blob/7.0.x/grails-gsp/grails-layout/src/main/groovy/org/apache/grails/web/layout/GSPGrailsLayoutPage.java > and > https://github.com/apache/grails-core/blob/7.0.x/grails-gsp/grails-layout/src/main/groovy/org/grails/plugins/web/taglib/RenderGrailsLayoutTagLib.groovy > > As a future improvement, it would be possible to refactor grails-layout so > that the use of SiteMesh is replaced, since it doesn't really require > SiteMesh to provide the functionality. This refactored solution could be a > better default than switching to SiteMesh 3. > > The upgrade guide provides instructions on how to use the previous layout > engine: > https://docs.grails.org/latest/guide/upgrading.html#_12_13_layout_plugins > > Please rerun your performance tests with the grails-layout plugin. > > -Lari > > On 2025/09/15 10:33:13 Gianluca Sartori wrote: > > Thank you for the suggestion James, > > > > we had improvements, but still slightly slower: > > - Is it Groovy 4 being slower than Groovy 3? > > - Did something changed in the GSP processing? > > > > Same URL, 4 requests with 3 warmup requests (not shown). > > From slower to faster: > > > > Grails 7 - Indy ON > > TRANSITION rendered in 4807ms > > TRANSITION rendered in 4779ms > > TRANSITION rendered in 4660ms > > TRANSITION rendered in 4699ms > > > > Grails 7 - Indy OFF > > tasks.withType(GroovyCompile) { > > groovyOptions.optimizationOptions.indy = false > > } > > TRANSITION rendered in 3660ms > > TRANSITION rendered in 3442ms > > TRANSITION rendered in 3510ms > > TRANSITION rendered in 3700ms > > > > Grails 6 > > TRANSITION rendered in 2853ms > > TRANSITION rendered in 2864ms > > TRANSITION rendered in 2734ms > > TRANSITION rendered in 2800ms > > > > > > > > Gianluca Sartori > > -- > > https://dueuno.com > > > > On Thu, 11 Sept 2025 at 18:44, James Daugherty via dev > > <[email protected]> wrote: > > > > > > If you disable invoke dynamic does it make a difference? Groovy 4 > > > switched > > > to that by default. > > > > > > -James > > > > > > On Thu, Sep 11, 2025 at 12:36 PM Gianluca Sartori <[email protected]> > > > wrote: > > > > > > > I've tested a single page, one created to test our own Table object > > > > generation. > > > > > > > > It's a big page so it is normal that the generation takes time. The > > > > issue is not the 3 seconds duration. > > > > > > > > The problem is that the same page, running on the same hardware, shows > > > > different generation times between Grails 6 (around 3 secs, OK) and > > > > Grails 7 (more than 4 secs - ?). > > > > > > > > Gianluca Sartori > > > > -- > > > > https://dueuno.com > > > > > > > > On Thu, 11 Sept 2025 at 18:06, James Fredley <[email protected]> > > > > wrote: > > > > > > > > > > Do these times represent multiple requests? > > > > > > > > > > Here is some recent load testing I performed on an AWS t4g.micro with > > > > 1GB RAM against two actions with GSPs. > > > > > > > > > > > > > > ======================================================================================================================== > > > > > ---- Global Information > > > > -------------------------------------------------------------|---Total---|-----OK----|----KO---- > > > > > > request count > > > > | 89,438 | 89,438 | - > > > > > > min response time (ms) > > > > | 26 | 26 | - > > > > > > max response time (ms) > > > > | 575 | 575 | - > > > > > > mean response time (ms) > > > > | 39 | 39 | - > > > > > > response time std deviation (ms) > > > > | 19 | 19 | - > > > > > > response time 50th percentile (ms) > > > > | 34 | 34 | - > > > > > > response time 75th percentile (ms) > > > > | 41 | 41 | - > > > > > > response time 95th percentile (ms) > > > > | 63 | 63 | - > > > > > > response time 99th percentile (ms) > > > > | 97 | 97 | - > > > > > > mean throughput (rps) > > > > | 149.06 | 149.06 | - > > > > > ---- Response Time Distribution > > > > ---------------------------------------------------------------------------------------- > > > > > > OK: t < 800 ms > > > > 89,438 (100%) > > > > > > OK: 800 ms <= t < 1200 ms > > > > 0 (0%) > > > > > > OK: t >= 1200 ms > > > > 0 (0%) > > > > > > KO > > > > 0 (0%) > > > > > > > > > ======================================================================================================================== > > > > > > > > > > On 2025/09/11 14:11:36 Gianluca Sartori wrote: > > > > > > Hi folks, > > > > > > > > > > > > I've been testing our "stress-test" with grails 7.0.0-RC1, It looks > > > > > > like the GSP rendering is slower than earlier (we do server side > > > > > > rendering so for us it is crucial to keep GSP generation time & > > > > > > final > > > > > > weight as low as possible). > > > > > > > > > > > > This is not at all a priority at the moment, but I was wondering if > > > > > > something changed under the GSP hood or the issue may be somewhere > > > > > > else. > > > > > > > > > > > > Grails 6 > > > > > > 15:58:56.608 WARN [https-jsse-nio-9443-exec-5] > > > > > > d.elements.core.ElementsController : Rendered TRANSITION in > > > > > > 3230ms > > > > > > 15:59:04.755 WARN [https-jsse-nio-9443-exec-3] > > > > > > d.elements.core.ElementsController : Rendered TRANSITION in > > > > > > 2874ms > > > > > > 15:59:13.482 WARN [https-jsse-nio-9443-exec-1] > > > > > > d.elements.core.ElementsController : Rendered TRANSITION in > > > > > > 3136ms > > > > > > 15:59:20.795 WARN [https-jsse-nio-9443-exec-4] > > > > > > d.elements.core.ElementsController : Rendered TRANSITION in > > > > > > 3121ms > > > > > > > > > > > > Grails 7 > > > > > > 16:03:30.043 WARN [https-jsse-nio-9443-exec-1] > > > > > > d.elements.core.ElementsController : Rendered TRANSITION in > > > > > > 4608ms > > > > > > 16:03:44.926 WARN [https-jsse-nio-9443-exec-2] > > > > > > d.elements.core.ElementsController : Rendered TRANSITION in > > > > > > 4623ms > > > > > > 16:03:59.200 WARN [https-jsse-nio-9443-exec-4] > > > > > > d.elements.core.ElementsController : Rendered TRANSITION in > > > > > > 4626ms > > > > > > 16:04:49.791 WARN [https-jsse-nio-9443-exec-9] > > > > > > d.elements.core.ElementsController : Rendered TRANSITION in > > > > > > 4994ms > > > > > > > > > > > > > > > > > > Gianluca Sartori > > > > > > -- > > > > > > https://dueuno.com > > > > > > > > > > > >
