聊聊前端性能優化

前端性能優化完全是一個技術話題,但是對於項目的用戶體驗有非常大的影響,如果你的網站打開要等待三五秒或者等到瀏覽器提示無法連接,那網站哪來的流量,哪來的品牌影響和用戶忠誠度,掙錢就算了。


3s,作爲判斷一個用戶忍受你網站速度的限度,如果超過3s,用戶已經對這個網站產生了負面的牴觸心理。

前端性能優化了解yahoo性能優化N條的同學應該不會陌生,安裝一個YSlow評分並對照着優化就可以了,但是有沒有想過爲什麼要這麼做就可以提升速度,這些與Web標準有沒有某種關聯或者因果呢。


我把這些個條目分成三類,服務端運算優化,傳輸優化,客戶端運算優化:


第一類,服務器端優化


服務器端就是對你的網站的動態語言的執行(asp,php),數據庫查詢,存儲等速度,總的來說就是輸入/輸出的運算。這些跟前端沒關係,但是影響着前端。YSlow裏面沒有,鬼知道你網站的服務器性能如何,看不出來,就自行優化服務器性能,數據庫性能,多買點服務器擴容。

yslow有一條儘早刷新 Buffer (Flush the Buffer Early),貌似是不等html完成生成就傳輸。

提高域名的DNS解析速度。減少DNS的解析個數。這個不好歸類,暫時放到這裏吧。


第二類,傳輸優化



這類是大頭,很煩,首先是字節,字節越小越好,怎麼能小下來,最有效的方式就是google的方案,把首頁做的極其精簡,圖片,html,靜態文件都很小,再就是緩存,把文件放到本地緩存區讀取。還有http請求數,減少文件傳輸中的排隊等待。


字節優化:


   1. 減少冗餘html,結構化,語義化的html來實現,行爲,表現,結構分離,獨立的html文件將變得很小。

   2. 壓縮文本文件,css,html,js去掉註釋、空格、換行等。

   3. 降低圖片字節,選擇合適的圖片類型,png-8是一個好東西,再用工具將圖片進行壓縮去掉,比如png-8的壓縮工具。用合適的圖片尺寸,不要把大圖控制一下寬高就用上了。

   4. gzip壓縮一下,減小服務器端傳輸到客戶端時候的字節。

   5. flash文件和flash+xml的動態flash也減小字節


緩存:

服務器端配置一下,提高緩存的命中率和把不經常修改的文件緩存了。

Add Expires headers、Etags、ajax使用get方式便於緩存。

把能分離出來的css,js分離成外部文件便於緩存。

使flash和xml文件可緩存。

打通不同運營商的限制

CDN提高不同類型運營商的網絡傳輸速度,電信,網通,鐵通,教育網統統搞定。


請求數:

減少文件請求數,能合併到一起的合併一下,css,js,圖片等,減小排隊等待和服務器端開銷。

分域提高同時加載數,優化排隊等待。

避免404無效請求數。

避免重定向。


延遲加載和預載:

把暫時不用的文件等主體頁面加載完了再加載,把用戶稍後要看瀏覽的內容預先加載進來,相冊瀏覽就是很好的例子,先用小圖片放大再把大圖展示出來,看本張圖片時把下一張預載進來等等。


第三類:客戶端優化


   1. 討厭的IE的濾鏡和CSS expressions少用,小心把瀏覽器搞掛,CUP 100%死機。

   2. CSS放到前面,js能放到後面的放在代碼後面。將頁面儘早展示給用戶。

   3. 減少iframe的使用,避免CPU扛不住。

   4. 減少DOM個數,減低瀏覽器解析壓力。

   5. 使用 <link> 而不是@importChoose <link> over @import,在 IE 中 @import 指令等同於把 link 標記寫在 HTML 的底部。而這與第一條相違背。

   6. 提高js的執行效率,話題太大不提了

   7. 縮小 Cookie,針對 Web 組件使用域名無關性的 Cookie (Use Cookie-free Domains for Components)

   8. 還有小圖片的repeat背景會提高瀏覽器的CPU佔用。

   9. 合理的DOM排序,把重要的內容代碼前置,優先加載。


再就是些沒對號入座的雅虎性能優化的條目。至此可以檢驗到頁面工程師不是蓋的,需要對代碼、文件,http協議,緩存,服務器等精準的學習和控制,達到提供用戶最最基本的體驗——訪問速度的體驗。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章