簡體   English   中英

如何使用 Thymleaf 在 Spring Boot 應用程序中正確緩存數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM