鍍金池/ 問答/Java  數(shù)據(jù)庫/ javaweb開發(fā)優(yōu)化

javaweb開發(fā)優(yōu)化

做了一個(gè)個(gè)人博客的項(xiàng)目,首頁需要展示很多內(nèi)容,有網(wǎng)站的基本信息,羅列最新的博客,個(gè)人介紹,最新評(píng)論,推薦文章,熱門文章,熱門文章標(biāo)簽等。這些都需要查詢數(shù)據(jù)庫。
我使用的是springmvc,當(dāng)訪問首頁時(shí),首先訪問一個(gè)Controller然后把所有這些信息全部通過數(shù)據(jù)庫查出來,然后放到model里再展示出來,但是感覺這樣做的效率太低,展示一個(gè)首頁需要訪問接近10次數(shù)據(jù)庫。用騰訊云1M帶寬的服務(wù)器,訪問首頁需要等待5s才能顯示完所有信息,實(shí)在是太慢了,請問一般這種首頁是怎么實(shí)現(xiàn)的?是怎么去訪問數(shù)據(jù)庫的呢?如何去優(yōu)化?

回答
編輯回答
雨蝶
用騰訊云1M帶寬的服務(wù)器,訪問首頁需要等待5s才能顯示完所有信息

1M的帶寬其實(shí)只有128kb/s,如果需要加載的資源比較多,慢是當(dāng)然的

首先訪問一個(gè)Controller然后把所有這些信息全部通過數(shù)據(jù)庫查出來

如果有信心可以試試并行這些查詢,更穩(wěn)妥的方式是ajax,把多個(gè)查詢分解成(部分)并行的多個(gè)請求

2018年5月8日 07:45
編輯回答
命于你

1:最新評(píng)論,推薦文章,熱門文章,標(biāo)簽等等放到緩存(redis或者ehcache等緩存)中去,沒有必要每次都從數(shù)據(jù)庫中獲取。
2:文章列表頁面也可以做緩存,做好緩存更新策略即可。
3:文章詳情頁面可以靜態(tài)化處理,側(cè)欄數(shù)據(jù)使用ajax獲取。
4:css和js等資源使用CDN,免費(fèi)的CDN一大堆。

2017年3月22日 19:39
編輯回答
孤影

建議先在本機(jī)測試一下訪問速度,以明確問題:
1、如果瓶頸在數(shù)據(jù)庫訪問多,那么和1M帶寬就沒什么關(guān)系。可以考慮采用ajax的方式,先加載主要的內(nèi)容,其他內(nèi)容異步加載。
2、如果是返回?cái)?shù)據(jù)庫多,造成網(wǎng)絡(luò)傳輸慢,才和帶寬有關(guān)系,這時(shí)候一般是做分頁查詢降低數(shù)據(jù)量,另外就是服務(wù)器上啟動(dòng)gzip壓縮,會(huì)大大降低網(wǎng)絡(luò)傳輸量。

理論上一個(gè)業(yè)務(wù)動(dòng)作中,訪問10次數(shù)據(jù)庫不算什么,如果少量數(shù)據(jù)的查詢,單次數(shù)據(jù)庫的查詢處理時(shí)間一般在幾十毫秒,整體算下來總時(shí)間應(yīng)該在1秒以內(nèi)。

還有一個(gè)思路就是靜態(tài)化處理,因?yàn)椴┛皖惖恼军c(diǎn)內(nèi)變更不頻繁,在內(nèi)容發(fā)布的時(shí)候可以生成靜態(tài)頁面,用戶訪問的時(shí)候只顯示生成好的靜態(tài)問題,這樣速度回快很多。

2018年7月15日 20:42
編輯回答
怣痛

有兩個(gè)方法:
1.二級(jí)緩存,在服務(wù)器啟動(dòng)的時(shí)候,把這些數(shù)據(jù)都加載到緩存當(dāng)中,就不用每次向數(shù)據(jù)庫發(fā)請求了;
2.在頁面使用ajax異步加載,使用異步并發(fā)獲取服務(wù)器數(shù)據(jù).
這應(yīng)該是最簡單的兩種實(shí)現(xiàn)方式了,如果沒有的話可以試一下,也可以兩種同時(shí)使用.

2018年1月27日 11:46
編輯回答
背叛者

這種我覺得應(yīng)該用ajax請求比較好,單頁面路由

2017年12月12日 11:18