優化vue+springboot專案頁面響應時間:waiting(TTFB) 及content Download

HiEagle發表於2021-12-25

優化vue+springboot專案頁面響應時間:waiting(TTFB) 及content Download

TTFB全稱Time To First Byte,是指網路請求被髮起到從伺服器接收到地一個位元組的這段時間。包含了TCP連線時間、傳送HTTP請求時間和獲得相應訊息第一個位元組的時間。
環境: 開發 vue Cascader 級聯選擇器,listview介面一次性請求樹結構資料接近5w條(3.9MB),nginx 反向代理 部署vue 、部署springboot,同機部署 mysql。
問題:生產環境,請求listview介面就waiting(TTFB) 4秒,content Download 16 秒,總計需要20秒,時間太長了。
開發環境,本機部署nginx,連線遠端伺服器端mysql. 請求listview介面就waiting(TTFB) 4秒,content Download 1 秒,總計需要5秒。
優化方法有如下:
1)服務端資料庫連結地址串 及 vue 伺服器連結地址,改外網ip 、域名 、localhost 、proxy_pass為 127.0.0.1 ,直接影響waiting(TTFB)。原因:127.0.0.1無需解析,localhost還要本地DNS解析。
MYSQL的安全策略的問題,對於每一個連線以及每一個操作,MYSQL都會check當前使用者的主機名,so,當我們對資料庫進行op的時候,MYSQL資料庫伺服器都會check一次主機名,這就導致了我們遠端運算元據庫的客戶端出現幾秒鐘的等待狀態。
2)前端需要tree 資料結構,如果直接返回List, 前端處理慢,直接改用後端處理。後端處理方式:使用Map<id, object>存放id 和物件本身。查詢父節點id時,直接map.get( parentID)獲取父節點物件,追加到父節點的childList中。注意不要使用遞迴,非常慢。也不要使用雙層迴圈。
3)返回給前端樹結構資料欄位只有必要欄位:id,name,parent_id,children, 刪除多餘欄位
4)nginx 及vue 開啟 gzip 
5)查詢語句優化,使用explain分析,建立索引,強制使用索引,使用關聯查詢【join】代替子查詢,使用varchar/nvarchar 代替char/nchar ,因為首先變長欄位儲存空間小,可以節省儲存空間,其次對於查詢來說,在一個相對較小的欄位內搜尋效率顯然要高些。
6) vue端ajax中的setRequestHeader設定請求頭, Connection:keep-alive
7)nginx 配置http2
8) 伺服器dns解析 vi /etc/hosts  新增 ip 域名  

 

經過以上優化後,listview介面請求耗時減少到10秒內。

再怎麼優化呢?查了網上不少資料,最後再想了一下,springboot 專案介面返回資料是否可以壓縮。度娘說可以。
application.yml
server:
compression:
enabled: true
min-response-size: 1024
mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
再次對比結果: 傳輸資料大小456kb,響應時間1.33秒,到此總算告一段落

 

 

但請教大拿說,waiting(TTFB)還可以再優化一下 控制在500ms內才算正常。
待後期再想想辦法。

相關文章