天天看點

網絡性能優化常用方法

1.減少頁面請求

按需加載 合并壓縮檔案 将小圖示合并成雪碧圖  字型圖示    dataURL 内置圖檔 

2.優化網絡連結 

cdn, 減少dns查詢, 避免伺服器端重定向 

3.減少下載下傳量

壓縮css圖檔 混淆壓縮js代碼  伺服器端啟用gzip壓縮

4.啟用緩存

5.頁面内部優化

css置頂  ----   為避免當頁面變化時重繪頁面元素,浏覽器會阻塞頁面呈現,直到樣式表解析完畢 

js置底    ----   script元素會阻塞後續内容的解析,因為script中可以同過document.write來更改頁面

不會縮短加載時間,但會減少頁面呈現時間

白屏時間 fetchStart --   app-cache-- dns-- tcp -- request -- response

前端性能監測器

https://www.cnblogs.com/bldxh/p/6857324.html

CSS樣式優先級

先比較優先級

  1. 浏覽器聲明
  2. 使用者普通聲明
  3. 作者普通聲明
  4. 作者重要聲明
  5. 使用者重要聲明

再比較特殊性

  1. 聲明來自内聯的style屬性則 S+1;
  2. 聲明中含有id屬性則 I+1;
  3. 聲明中含有類、僞類、屬性選擇器則 C+1;
  4. 生命中含有元素、僞元素選擇器則 E+1;

 https://www.cnblogs.com/ohmyrose/p/8047859.html

進行性能優化,首先要知道評價頁面性能的名額

https://segmentfault.com/a/1190000004176324

網站性能優化工具大全-----HTML CSS JavaScript如何優化

https://segmentfault.com/a/1190000002418920

異步加載css和JavaScript腳本

https://segmentfault.com/a/1190000002589116

  • 隻有 10%~20% 的最終使用者響應時間花在了下載下傳 HTML 文檔上。其餘的 80%~90% 時間花在了下載下傳頁面中的所有元件中;
  • 另外一點是,優化背景需要花費比較大的成本,優化前端隻需要适當地遵循一些法則會有較大的提升,相對低成本高收益

提高前端性能的黃金法則

https://segmentfault.com/a/1190000004645141

雖然書中的很多手段都已經過時了,但是思路基本沒變,取其精華就好。

前端性能優化一味奉行“最佳實踐”有時候反而過猶不及,是以針對項目的實際情況來優化才是明智的選擇。

提升網頁性能

http://www.w3cplus.com/performance/10-ways-minimize-reflows-improve-performance.html

網頁卡頓的調試方法

 都可以啊,timeline 比較直接,一般先看這個。

profile,可以詳細的看具體的調用資訊。 

 頁面隻要不低于30幀 就都是流暢

一般到26都看不出來

 flash 是多少幀?

gif一般8-12幀吧 

 大部分都用24幀…… 

 幀率要求高的一般都是3d 

轉動視角 對幀率要求很高 

Excetional Performance 團隊總結出了一系列可以提高網站速度的方法。可以分為 7大類 35條。

包括内容 、伺服器 、 CSS 、 JavaScript 、Cookie 、圖檔 、移動應用 ,七部分。 

一、内容部分

  • 盡量減少 HTTP請求
  • 減少 DNS查找
  • 避免跳轉
  • 緩存 Ajxa
  • 推遲加載
  • 提前加載
  • 減少 DOM元素數量
  • 用域名劃分頁面内容
  • 使 frame數量最少
  • 避免 404錯誤

二、伺服器部分

  • 使用内容分發網絡
  • 為檔案頭指定Expires或Cache-Control
  • gzip壓縮檔案内容
  • 配置ETag
  • 盡早重新整理輸出緩沖 
  • 使用GET來完成AJAX請求
  • 避免空的圖像來

三、CSS部分

  • 把樣式表置于頂部
  • 避免使用CSS表達式(Expression)
  • 用<link>代替@import
  • 避免使用濾鏡

四、 JavaScript部分

  • 把腳本置于頁面底部
  • 使用外部JavaScript和CSS
  • 削減JavaScript和CSS
  • 剔除重複腳本
  • 減少DOM通路 
  • 開發智能事件處理程式

五、Coockie部分

  • 減小Cookie體積
  • 對于頁面内容使用無coockie域名

六、Image 部分

  • 優化圖像
  • 優化CSS Spirite
  • 不要在HTML中縮放圖像
  • favicon.ico要小而且可緩存

七、 Mobile部分

  • 保持單個内容小于25K
  • 打包元件成複合文本

https://segmentfault.com/a/1190000004139275

代碼級優化

關于圖檔

  1. 頁面内的大圖,特别是banner圖,登入頁背景圖等,使用第三方的cdn加速。同時做一遍壓縮,如果壓縮之後還超過200kb,則和設計師溝通是否取消或者更換圖檔。
  2. 精靈圖必備,各種小圖示,小icon,做到一張圖檔裡面去。
  3. 盡量使用icon font代替小圖示,icon font的優點可以甩普通的icon圖示幾條街,随意調整大小,改變顔色,太cool!!
  4. 如果項目很大,公司不差錢,最佳方案是把圖檔資源放在單獨的伺服器上,配置獨立的域名,圖檔資源的加載由圖檔域名加載,很多大公司的靜态資源都是由獨立的伺服器來存放和分發的
我一般和設計師讨價還價的底線就是圖檔必須加載流暢,如果使用者打開網頁圖檔加載半天出不來,就算我們的圖檔做的再漂亮,又有什麼卵用!

關于js

  1. 第三方的js庫,必須使用min版。站點内部的lib,每次釋出上線之前必須使用gulp壓縮合并。
  2. 移動端使用zepto庫,不允許使用jquery
  3. 給js代碼一個全局命名空間,舉個例子,我們的項目是某個自行車官網,全局命名空間就叫bike,和本項目有關的所有js方法,函數,變量,全部挂在bike的下面
var bike={};
bike.name='cookee';
bike.getOrderDetail=functtion(id){.....}           

關于css

  1. 提煉項目的公共樣式,按鈕、表單。
  2. 命名。面向屬性命名,通用子產品可以面向子產品命名,比如頭部header,尾部footer等,其他請盡量使用面向屬性的命名方式,這樣可以給css最大程度的複用自由,關于什麼是面向屬性的命名方式,請參考推薦
  3. 樣式分離再分離,在css裡面不要使用id屬性,留着id給js使用
  4. 減少css的層級嵌套,由于css的渲染是從右向左的,關于網頁的渲染,這個細說起來又可以寫一篇文章了。如果你的層級标簽嵌套多層,想想要浪費多少渲染時間,對于移動端毫秒必争的加載時間,你還有什麼理由不改進你的代碼
  5. 優雅的名字可以讓人一目了然,放一張前人總結的圖,沒事的時候多看看,潛移默化的記住這些名字
網絡性能優化常用方法

6.避免使用通配符

7.不使用标簽名或類名修飾ID規則:如果規則使用ID選擇器作為關鍵選擇器,不要給規則添加标簽名。因為ID本身就是唯一的,添加标簽名會不必要地降低比對效率。

8.不使用标簽名修飾類:相較于标簽,類更具獨特性。

9.盡量選擇最具體的方式:造成低效的最簡單粗暴的原因就是在标簽上使用太多規則。給元素添加類可以更快細分到類方式,可以減少規則去比對标簽的時間。

10.關于後代選擇器和子選擇器:避免使用後代選擇器,非要用的話建議用子選擇器代替,但子選擇器也要慎用,标簽規則永遠不要包含子選擇器。

11.利用可繼承性:沒必要在一般内容上聲明樣式。

關于html

  1. 精簡dom結構,減少備援html
  2. 語義化标簽,要學會用
  3. 移動端,使用svg繪圖代替canvas繪圖,canvas會有嚴重的鋸齒(如果有同學有實踐過的解決鋸齒的方案,我願恭聽)