![](/img/trans.png)
[英]How to cache data during application startup in Spring boot application
[英]How to properly cache data in spring boot application with Thymleaf
我正在為 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 條記錄)。
控制器:
List<String> servers = joinQueryService.getServerListing();
modelAndView.addObject("servers", servers);
然后,我將它設置為一個字符串列表並將其發送到前端。
百里香:
<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>
彈簧靴:
@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 中打開該文件並記錄處理時間:
大約需要 5 秒鍾。 沒有數據庫獲取; 沒有網絡流量; 沒有服務器端處理。
我認為底線是:這種大小的下拉菜單對用戶來說是笨拙的,並且在瀏覽器中處理速度很慢。
這意味着您的問題變得不同:如何向瀏覽器發送更少量的數據,並允許用戶瀏覽每次加載的結果,一次一頁。 順便說一下,我完全同意你的“毫秒”目標,而不是秒。 這是完全正確的。 也許你已經有了一個,但試着有一個特定的目標(“低於 300 毫秒”或類似的目標)。
當然,您的代碼中可能會進行優化 - 但此時它們可能沒有實際意義。
可能不是您想要的答案,但我希望這會有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.