gpt4 book ai didi

java - 如何使用 Thymeleaf 在 Spring Boot 应用程序中正确缓存数据

转载 作者:行者123 更新时间:2023-12-02 09:00:03 25 4
gpt4 key购买 nike

我正在为我的 Spring boot 应用程序编写一些 Java 代码,以接收包含 40,000 个元素的列表,并通过 Thymeleaf 将其发布在下拉字段中。但是,我注意到当我加载数据并进入下拉菜单时,一切都很慢。

我被告知要缓存这些值并存储它们。虽然我对这个过程不太熟悉,但我尝试为我的 SpringBootApplication 使用 @Cacheable 注释,但它仍然不起作用。我正在尝试查看我做错了什么,或者是否有更好的方法来解决我遇到的这个问题。

服务层:

@SuppressWarnings("unchecked")
@Cacheable("String")
public List<String> getServerListing(){
StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("GetAllServers");
return storedProcedure.getResultList();

}

首先,我有一个存储过程从服务器获取所有数据(约 40,000 条记录)。

Controller :

List<String> servers = joinQueryService.getServerListing();

modelAndView.addObject("servers", servers);

然后,我将其设置为字符串列表并将其发送到前端。

thymeleaf :

<div class="row">
<div class="col col-lg-9 search-bar">
<div class="form-group">
<label>Server:</label> <select class="js-example-basic-single3"
th:field="*{servers}" id="selectData3">
<option value=""></option>
<option th:each="servers : ${servers}" th:value="${servers}" th:text="${servers}" />
</select>

</div>
</div>
</div>

SpringBoot:

@SpringBootApplication
@Cacheable
public class TaddmDevApplication {

public static void main(String[] args) {

Policy.setPolicy(new TaddmPolicy());

SpringApplication.run(TaddmDevApplication.class, args);
}

}

最佳答案

我认为这里的问题是:无论应用程序的其余部分如何简化,浏览器都需要几秒钟的时间来加载和/或显示如此大的下拉列表。

作为测试,我创建了一个文本文件,除了 40,000 个项目的下拉列表 (test.htm) 之外,什么都不包含:

<!DOCTYPE html>
<html>
<body>
<h2>Create a drop-down List</h2>

<label for="widgets">Choose a widget:</label>

<select id="widgets">
<option value="widget1">Widget 1</option>
<option value="widget2">Widget 2</option>
<option value="widget3">Widget 3</option>
<option value="widget4">Widget 4</option>
<option value="widget5">Widget 5</option>
<option value="widget6">Widget 6</option>
<option value="widget7">Widget 7</option>
... snipped for brevity!
<option value="widget39998">Widget 39998</option>
<option value="widget39999">Widget 39999</option>
<option value="widget40000">Widget 40000</option>
</select>

</body>
</html>

然后我在 Chrome 中打开该文件并记录处理时间:

big select list in browser

大约花了5秒。没有数据库获取;无网络流量;没有服务器端处理。

我认为底线是:这种大小的下拉菜单对于用户来说会很笨拙,并且在浏览器中处理速度很慢。

这意味着您的问题变成了另一个问题:如何向浏览器发送更适量的数据,并允许用户一次一页地浏览每次加载的结果。顺便说一句,我完全同意你的“毫秒”目标,而不是秒。这是完全正确的。也许您已经有了一个,但请尝试牢记一个特定的目标(“300 毫秒以下”或类似的目标)。

当然,您的代码中很可能有优化 - 但目前它们可能没有实际意义。

可能不是您想要的答案,但我希望这对您有所帮助!

关于java - 如何使用 Thymeleaf 在 Spring Boot 应用程序中正确缓存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60233010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com