優化小結及心得

2021-06-20 02:04:37 字數 1914 閱讀 6234

2023年12月份,對系統的首頁做了一些效能優化的工作,僅僅是從**方面,伺服器方面的沒有涉及到。

使用google瀏覽器的除錯模式檢視。

優化之前,首頁的載入時間在3.7秒左右。

優化之後,首頁的載入時間在0.7秒左右。

優化主要工作分為兩塊:

一、頁面**處理。

第一步:由於首頁是由多個頁面構成的,像是框架一樣,乙個總的頁面,劃分幾個區域,每個區域include乙個頁面,各個頁面都有一些對js等資源檔案的引用,對於這些不會發生改變的靜態資源,統一放在最外層的頁面上引用,最外層的這個頁面在不重新整理瀏覽器的情況不會重新整理,這樣就節省了js的載入時間。

第二步:對各個頁面上的js**進行處理,屬於變數或方法宣告的,統統移到外層的js檔案中。

第三步:有一塊內容是載入乙個地圖的flash檔案,地圖中顯示的資料從後台獲取,之前的做法是請求好資料後再生成flash檔案,現在改為先構建乙個空資料的地圖,把flash地圖先顯示出來,使用ajax請求後台資料,得到資料後再為地圖設定資料。

第四步:首頁上共有兩處地方使用了標籤,該標籤的請求是同步的,當沒有收到後台返回資料時,頁面不會顯示出來,所以都改為了ajax非同步請求。

以上的處理,頁面的顯示速度明顯加快了許多,雖然資料全部返回的時間沒有改變,但頁面的各個元件都能先顯示出來,對於使用者體驗有很大的提公升。

二、後台邏輯和sql處理。

優化了程式,由於對於重構還只是一知半解,在高手提供的sql幫助下,對for迴圈進行了處理,使用分組查詢。

這裡順便記錄一下其它同事對列表的查詢進行了優化,在資料量大的情況下,列表頁面的顯示使用資料庫的rownum,也就是物理分頁的方式進行查詢,有效的提高了查詢速度,如果帶有表的關聯查詢時,使用left join 的時候,根據場景的應用,可以考慮先使用物理分頁,縮小需要連線查詢的資料範圍,但對於部分排序查詢沒什麼作用,只能根據排序的條件呼叫不同的sql。

三、分層處理資料,盡可能的把資料放在離使用者最近的地方。

這裡是同事優化後分享的經驗和做法。主要思想是,把需要提供給瀏覽器的資料提前準備好,主要有幾種做法:

首先是建立有效的索引,在實際開發中,雖然很多地方都用到了索引,但並不是所有的索引都是高效的,有些甚至不如不使用索引直接查詢,可以通過資料庫的執行計畫進行分析,對花費時間及cpu使用情況等相關引數確定索引的建立。

其次是使用快取,快取分很多種,前面提到的在最外層頁面載入js等資源檔案,就是瀏覽器快取的一種應用,通過開發者工具可以看出,從伺服器取回的狀態是200,使用快取的話,狀態會是304,表示沒有被修改的。我們系統中用到了memcached快取,但是通過快取監控發現,快取的利用率非常低,對於很多實時性要求不高的資料都可以放入快取,把快取充分的利用起來。資料庫也有快取,這一塊內容不是很了解,以後掌握了再來更新吧。

再次,根據不同的需求和場景,可以考慮把底層的資料進行預處理,存入另一張表,在新錶的資料量不是很大的情況下是可行的,基本上所有的底層表資料量都比較大,而前端頁面上需要的資料還需要對底層資料進行一定的處理之後再顯示,對於歷史資料或不會發生改變的資料,完全可以預處理一下,我們是通過job,在系統資源空閒的時候執行,去生成新錶的資料,當請求資料時,直接從新錶中取出預處理過的資料,這樣的速度就會得到提公升,一些使用了圖形元件之類的展示頁面,也可以通過類似的思路,生成靜態頁面來顯示。

效能測試工具:目前使用ab測試。

心得:

把js**的宣告放在不太會重新整理的頁面中引用,盡可能避免由於重複載入js檔案造成的浪費。

合理使用非同步請求,減少因請求資料時間過長對使用者造成的等待影響。

程式中盡量少使用for迴圈,盡量使用sql分組查詢。

考慮多次請求資料庫簡單查詢和請求一次資料庫複雜查詢的總體效率。

在場景允許的情況下,盡量把資料放在離使用者最近的地方,盡量把資料整合成最接近頁面展示的結構。

專案小結心得

1看問題的角度,不能總以自己的思維去尋找答案,要多用專業名詞,有時候請教前輩會讓你換乙個思路去思考問題,適當的轉換思維往往離解決問題更進一步 2在敲 的過程中,要慢慢學會思考每一步的流程,必要的話可以使用思維導圖記下每乙個步驟,然後再寫 會讓你大腦思路變得清晰,並且更加專注。3在遇到不會的問題,學會...

Hive及 hql優化個人心得

hql優化篇 優化的核心一 優先考慮全表掃瞄問題 where條件判斷等在tablescan階段就進行過濾 2 跨區間跑數 方案 關聯時間維表設計 left join select part dt from dim.dim period d 可以根據需求設計不同時間字段 主表時間分割槽小於時間維 做跨...

php優化及高效提速問題小結

function userloginfo usertemp login userloginfo userdb 比function userloginfo usertemp userloginfo userdb 要高效 urlarray explode http server vars request...