Thymeleaf 选择选项性能问题

2023-12-19

我最近一直在摆弄 Spring MVC 5 和 Thymeleaf 3.0,并注意到一些奇怪的事情。我已经开始根据网站上的教程实现下拉列表,并注意到一些性能问题。如果我使用以下代码,我的页面大约需要 5.5 秒才能呈现大约 100 个项目的下拉列表。

<select th:field="*{item}">
    <option th:each="item : ${items}" 
            th:value="${item.getId()}" 
            th:text="${item.getValue()}"></option>
</select>

另一方面,如果我使用以下代码,我的页面将在大约 150 毫秒内呈现。

<div th:each="item : ${items}">
    <span th:text="${item.getId()}"/>
    <span th:text="${item.getValue()}"/>
</div>

我已经循环遍历控制器中的项目列表并打印出这些值,以查看从数据库获取数据是否有任何减慢,但是从控制器中抓取项目是立即发生的。我还尝试在 select 标记中渲染不同的 html 元素以进行测试,即使它不是有效的 html,它仍然可以快速渲染页面。

我唯一一次在页面渲染上遇到极大的延迟是当我在选项的 select 标签内使用 th:each 时。 Thymeleaf 处理选择标签的方式不同吗?我认为,如果相同的项目列表,调用相同的方法可以通过循环 div 在 130 毫秒内渲染页面,那么它应该能够以相当的速率创建选项,而不是花费 5.5 秒。

以前有人遇到过这样的问题吗?我做了一些搜索,发现 Thymeleaf 中存在循环性能问题,但这些案例有超过 100,000 条记录,而我的列表大约有 100 条。任何帮助将不胜感激。

Update

我已将问题范围缩小到在 th:field="*{item}" 上表现不佳。如果我运行以下代码,页面会立即加载。

<select>
    <option th:each="item : ${items}" 
            th:value="${item.getId()}" 
            th:text="${item.getValue()}"></option>
</select>

一旦我尝试使用 th:field="*{item}" 绑定选择,页面就会挂起大约 5.5 秒。使用 th:field 进行绑定是否会导致延迟问题?


我遇到了同样的问题,选择/选项部分的页面创建花费了一分钟多的时间。我的代码有点不同,因为我在表格内有选项,但我认为这并不重要。我最初的代码如下所示:

<tr th:each="scorePart,rowStat : ${song.scoreParts}">
    <td>
        <select th:field="*{scoreParts[__${rowStat.index}__].instrument}">
            <option th:each="i2 : ${allInstruments}"
                    th:value="${i2.id}"
                    th:text="${i2.name}">bla</option>
        </select>
    </td>
    <td> more data... </td>
</tr>

但后来我将 id 添加到字段部分:

<tr th:each="scorePart,rowStat : ${song.scoreParts}">
    <td>
        <select th:field="*{scoreParts[__${rowStat.index}__].instrument.id}">
            <option th:each="i2 : ${allInstruments}"
                    th:value="${i2.id}"
                    th:text="${i2.name}">bla</option>
        </select>
    </td>
    <td> more data... </td>
</tr>

然后一切正常。两种情况的结果相同,只有第二种情况没有延迟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Thymeleaf 选择选项性能问题 的相关文章

随机推荐

  • 如何在plsql中的过程体内创建游标

    我要创建光标动态地位于过程体内我也必须使用for loop而不是下面的代码 我做了动态游标 但无法使用 for 循环 PROCEDURE myprocedure AS LV TEST CUR SYS REFCURSOR LV QUERY V
  • 如何使用 SymPy 和 LaTeX 显示百分比字符

    我一直在使用 Sympy 来研究电力系统的方程 并且已经进行了很多处理 以便方程看起来不错且体面 所有值都包含遵循它们的单位 甚至通过方程组合也是如此 我认为这非常重要 因为目标是我正在编写的用于计算我的值的文档是我将呈现的最终文档 我正在
  • Scala (2.8) 清单如何工作?

    我有一些 Scala 代码大量使用了泛型 并且我从文档中了解到 在参数化约束中使用清单可以帮助我解决类型擦除问题 例如 我想实例化泛型类型的新对象 只是 我想更多地了解它是如何工作的 它几乎感觉就像某种哈希图 为每个调用站点获取一个条目 这
  • 我可以使用 mono 的 AOT 功能来本机“预编译”.NET DLL/EXE,以使它们更难进行逆向工程吗?

    我可以使用 mono 的 AOT 提前编译 功能来本机 预编译 我自己的一些 NET DLL 和 或 EXE 的全部或部分 以使它们更难以进行逆向工程吗 我正在使用 Windows 7 x64 但我也有 x86 XP 机器 和 NET 3
  • 使用 ASP.NET MVC 设置路由 {tenant}/{controller}/{action}/{id}?

    我想设置一个多租户 ASP NET MVC 应用程序 理想情况下 这个应用程序应该有一条路线 tenant controller action id each tenant代表应用程序的逻辑实例 简单地独立的多用户帐户 我仍然不清楚具体的细
  • Vuetify / DataTable:更改“显示分组依据”按钮的样式?

    我想使用 vuetify 数据表中的默认分组功能 它工作正常 但我想更改分组的默认按钮样式并将其替换为图标 那可能吗 如果我检查开发工具中的按钮 它只会显示 span group span 在文档中只找到这个 https vuetifyjs
  • 使用 FIRST_VALUE 而不在分组依据中包含内部列

    我正在使用一个看起来像这样的表 userID eventDate eventName 1 2019 01 01 buySoup 2 2019 01 01 buyEggs 2 2019 01 03 buyMilk 2 2019 01 04 b
  • 如何使用 rstanarm 以 APA 风格报告贝叶斯线性(混合)模型?

    我目前正在努力解决如何按照 APA 6 建议报告输出的问题rstanarm stan lmer 首先 我将在频率论方法中拟合混合模型 然后尝试使用贝叶斯框架执行相同的操作 这是获取数据的可重现代码 library tidyverse lib
  • 如何添加Voronoi图?

    我想向我的集群添加 Voronoi 图 也就是说 我想要一张包含我的簇 质心 Voronoi 区域的图 有简单的方法吗 I tried x lt c 4 7 9 2 3 3 7 7 8 8 9 9 y lt c 6 3 3 6 5 7 2
  • Symfony2 从表中删除记录

    我的树枝上有一个按钮 我希望能够使用它从表中删除记录 当我点击删除按钮时 页面会重新加载 但不会删除任何记录 这是我的树枝 h1 Admin Area The football blog h1 table class zebra thead
  • 当 JSpinner 失去焦点时用户输入无效值时如何“注意/陷阱”

    这是 SSCCE 对我之前问题的延续 上一个问题 https stackoverflow com questions 20902932 how to check manual edits on a jspinner field using
  • 编辑复制到剪贴板的LMC按钮

    我有一些问题LMC 按钮 http www lettersmarket com view blog a 3 copy to clipboard lmcbutton html因为它的编码方式 ShowLMCButton Copied Text
  • PostgreSQL JDBC getGenerateKeys 返回所有列

    我最近在一个项目的后端从 MySQL 切换到 PostgreSQL 并发现我的一些数据库代理方法需要审查 为了插入链接的对象 我使用事务来确保存储所有内容 我使用 jdbc 方法执行此操作 例如setAutoCommit false and
  • 未找到符号。 Collect2:ID 返回 1 退出状态

    我收到以下错误 Undefined symbols OBJC CLASS SurveyDelegate referenced from objc class ref to SurveyDelegate in Menus o ld symbo
  • 如何使用存储为 CSV 的矢量数据在 mahout 中执行 k 均值聚类?

    我有一个包含数据向量的文件 其中每行包含一个以逗号分隔的值列表 我想知道如何使用 mahout 对这些数据执行 k 均值聚类 wiki 中提供的示例提到了创建sequenceFiles 但除此之外 我不确定是否需要进行某种类型的转换才能获取
  • 使用 C# 检测文件名字符是否被视为国际字符

    我编写了一个小型控制台应用程序 下面的源代码 来定位并选择性地重命名包含国际字符的文件 因为它们是大多数源代码控制系统持续痛苦的根源 下面有一些背景知识 我使用的代码有一个简单的字典 其中包含要查找和替换的字符 并删除使用超过一个存储字节的
  • SQL Server 2012:如何将所有数据库存储过程编写成单独的 .sql 文件?

    我想编写从 SQL Server 2012 到 Visual Studio 2012 的所有存储过程的脚本 sql文件 在不同的项目中 我怎么做 我想要每个存储过程都有一个 sql 文件吗 在 SQL Server 2012 中右键单击 D
  • 为什么我的谓词没有回溯?

    我不明白为什么我的谓词不回溯并找到所有解决方案 person john person erik allExceptSpider person Spider T setof person X person X S subtract S per
  • 使用铯最轻的方法是什么?

    我有兴趣使用 Cesium 构建带有自定义图块的 3D 地球 但根据此处为 开始 说明 http cesiumjs org 2013 04 12 Cesium up and running 似乎您必须下载一个巨大的 30mb 目录并将整个内
  • Thymeleaf 选择选项性能问题

    我最近一直在摆弄 Spring MVC 5 和 Thymeleaf 3 0 并注意到一些奇怪的事情 我已经开始根据网站上的教程实现下拉列表 并注意到一些性能问题 如果我使用以下代码 我的页面大约需要 5 5 秒才能呈现大约 100 个项目的