移動優化經驗

2021-09-07 14:29:58 字數 3487 閱讀 6833

# 移動優化經驗

## 網路載入

### 優化請求

- 優化請求包大小

* **壓縮

* gzip壓縮

* 不同網路(2g/3g/4g/wifi)尺寸

* 合理減少header欄位/cookie

* mtu策略(1500位元組)

* 首屏載入時間控制

+ 3s完成(5s為使用者最大容忍度)

+ 網路平均速度(2.71mb/s = 0.33875mbps(1mbps=8mbps) = 346.88kbps)

+ 不超過1041kb,經驗值200k(考慮開啟響應、網路連線至少600ms)

- 減少請求次數(僅針對http)

* 合併js、css檔案、雪碧圖

+ 移動端雪碧圖(構建)

+ combo

* 避免重定向(一次重定向至少600ms)

* 避免重複資源請求

* 同時並行請求數量(android:4個,ios 5以後可支援6個)

- 解耦請求依賴

* 檔案並行載入/依賴執行(構建+模組化)

* 首屏cgi提前(元件)

* inline首頁必備js/css

* 非同步載入非首屏

- 連線優化

* 支援keep-alive

* 網路時間

* tcp握手/tls金鑰協商

### 快取策略

- cache

- web storage

* localstorage

* sessionstorage

* nativestorage(native,>=4.6,大資料)

- cookie

- web db

* indexeddb(推薦)

* web sql

- 合理快取cgi資料(local/ajax)

### 載入策略

- 首屏載入

* server render(react-node)

- 按需載入(元件化)

- lazyload(、元件)

* 延遲載入

* 滾動載入

- media query

## 監控上報

### h5監控體系

- 成功/失敗率

+ 載入

+ 斷流

- 測速(2g/3g/4g/wifi、元件)

+ 載入

+ 斷流

- 版本覆蓋

* 離線包更新率

+ tdw:版本號、使用者、環境等

* 離線包覆蓋率

+ monitor

- 錯誤日誌

* badjs

* tryjs

- performance

* timing(ios 8不支援)

* resouce timing(快取/非快取,手機暫不支援)

+ 平均延時

+ 失敗率

* 卡頓緩衝監控(timeupdate)

+ 卡頓緩衝時長

+ 卡頓緩衝次數(短流率)

- 錄播

+ 平均延時

+ 失敗率

* 卡頓緩衝監控(timeupdate)

+ 卡頓緩衝時長

+ 卡頓緩衝次數(短流率)

* 單位錄播時長等待監控

## seo

- keywords/description

- 合理減少pages數量

- 減少/flash/彈窗

- 外鏈權重不高

- canonical/alternate

- 提交sitemap

## 渲染優化

### html

- html meta viewport(可以加速頁面渲染)

- 優化dom tree

* 減少html標籤,避免不必要的巢狀

* 避免table

* 減少dom深度

- 減少dom渲染

* virtualdom(react)

* react-native

### 動畫

- 合理使用requestanimationframe

- 盡量使用css3

- 合理使用canvas代替多dom tree(5個) css3

- 高頻事件(touchmove、scroll) lazy化(debounce.js)

- gup渲染

### repaint/reflow

- 避免重新設定大小

- 避免頻繁的觸發repaint/reflow

## 檔案優化

### css樣式

- 避免style標籤

- 去掉expression

* 移除空的(多餘的)選擇器

- 合理使用float

- 合理使用iconfont

- 值為0的屬性不帶單位(相容性、壓縮自動處理)

- 標準化瀏覽器字首(構建)

- 減少font-size的申明(增加瀏覽器渲染計算)

- 非同步css檔案換成js檔案(構建)

### js指令碼

- 框架元件選擇(zepto/react/vue/angular)

- 使用documentfragment(zepto已解決)

- 事件優化

* 事件**

* 頻繁事件優化

* touchsatrt、touchend(tap)代替click

- 使用mqqapi(

- id選擇器

- 合理快取物件(dom、js物件、length)

- 慎用with

- 避免eval、function

- 使用join

### 檔案

- 大小

* 壓縮工具

+ 優圖(tu.oa.com)

+ 智圖(zhitu.tencent.com)

+ grunt外掛程式

* 格式

+ webp

+ sharpp

- 減少使用

* css畫圖

* svg畫圖

* 合理iconfont代替(最後的選擇)

* 避免使用bmp

- srcset + sizes(相容性)

- 格式(webp > jpg > png(png8 > png24) > gif)

- 大小限制(10k,不超過30k)

- 尺寸限制

移動直播技術秒開優化經驗

直播常見的問題包括 內容元素 content 編碼格式 codec 容器封裝 container i 幀是內部編碼幀 也稱為關鍵幀 p 幀是前向 幀 前向參考幀 b 幀是雙向內插幀 雙向參考幀 簡單地講,i 幀是乙個完整的畫面,而 p 幀和 b 幀記錄的是相對於 i 幀的變化。如果沒有 i 幀,p ...

移動直播技術秒開優化經驗

直播常見的問題包括 內容元素 content 編碼格式 codec 容器封裝 container i 幀是內部編碼幀 也稱為關鍵幀 p 幀是前向 幀 前向參考幀 b 幀是雙向內插幀 雙向參考幀 簡單地講,i 幀是乙個完整的畫面,而 p 幀和 b 幀記錄的是相對於 i 幀的變化。如果沒有 i 幀,p ...

移動直播技術秒開優化經驗

直播常見的問題包括 內容元素 content 編碼格式 codec 容器封裝 container i 幀是內部編碼幀 也稱為關鍵幀 p 幀是前向 幀 前向參考幀 b 幀是雙向內插幀 雙向參考幀 簡單地講,i 幀是乙個完整的畫面,而 p 幀和 b 幀記錄的是相對於 i 幀的變化。如果沒有 i 幀,p ...