【问题标题】:Performance problem in view framework in GrailsGrails 视图框架中的性能问题
【发布时间】:2026-02-21 21:30:01
【问题描述】:

我运行了一些测试来跟踪 grails 应用程序的响应时间。

我是这样使用grails的layout-view框架的:

在控制器中,我决定使用什么视图和布局

然后我用这样的代码渲染一个 genericView:

所以这个 genericView 可以做所有的事情。

我创建了一个性能过滤器,用于跟踪 afterController 和 beforeController(控制器时间)之间以及 beforeController 和 renderView(查看时间)之间花费的时间。

在一个布局中,我有很多 <g:pageProperty name=""> 标签,在视图中,我在 <content tag=".."> 中有相同的数字,嵌套包括 <g:include controller="..."/>

这非常有效,它让我可以重用布局(作为 html 部分的配置)和视图(配置和真实内容之间的映射)。

当我在查看时间中取平均值时,完成所有包含需要大约 35 毫秒。

我认为这很多。

您知道 grails 框架的任何其他有用替代方案来在呈现时包含和集成视图吗?

或者也许我必须以更好的方式使用该框架?

编辑:我只是注意到时间花在<g:include controller="..."/>

我在一个视图中包含 4 个控制器。 包含的控制器和动作只有一个render "something" 而时代是这样的:

主控制器: 控制器时间:3.98 观看时间:43.87

其他控制器(包含在主视图中): 总计:15.55

所以 4 个包含视图需要 28.32 毫秒才能运行

任何指针都会有所帮助。

提前致谢。

【问题讨论】:

  • 查看 grails 源代码以了解包含期间发生的情况。或者,更好的是,使用分析器。由于您处于该应用程序的高级阶段,因此您需要确切地知道原因。是的,4 个空控制器的 28 毫秒太多了。

标签: grails view layout


【解决方案1】:

Groovy 和 Grails 肯定存在一些性能问题,但总的来说它们可以忽略不计,因为数据库和网络延迟通常占请求时间的大部分。所以当我看到这个问题并期待可怕的数字时,我很好奇。 35 毫秒非常快。我认为你有更重要的事情要担心。

【讨论】:

  • 35 毫秒非常快,但这个测试非常简单。我也有 20 到 30 种包括在内。其中几个控制器使用不同的 REST 服务。所以我必须尽可能减少时间。 29 毫秒来组装已经渲染器的视图,或者准备控制器动作的弹出,在我看来这是一个奇怪的时间花费。
【解决方案2】:

由于我有限的 grails 开发,您的表现似乎是标准的,没有什么不寻常的。我相信这是一个过早优化的例子。您有什么硬性能目标,您是否正在编写一个要求响应时间在某个值范围内的应用程序?您是否比较了任何其他模型视图控制器框架和开发工具,例如Spring Roo,以了解性能比较以及它们在哪里花费时间?如果没有关于您的应用程序的更多信息,很难说您的瓶颈在哪里,但我认为您遇到的任何性能问题都更有可能发生在您的 REST 服务或数据库访问中。这些可能是您首先要关注的领域。尽可能使用 Hibernate 现金或 REST 调用的兑现结果可能会有所帮助。

【讨论】:

  • 该应用程序现在非常先进。不是过早优化。出于同样的原因,我现在无法更改 MVC 框架。我能做的是(如果不是很大的努力)改变我在视图中包含控制器的方式。而其他领域(REST)则通过缓存方法实现。