
紅豆官方網(wǎng)站
紅豆官方網(wǎng)站價(jià)格區(qū)間:
暫無
什么是紅豆電信?帶你玩轉(zhuǎn)豆卡全攻略!

給分享給大家一份硬貨!不知道豆卡資費(fèi)?不知道如何補(bǔ)實(shí)名登記?紅豆的號(hào)段是多少?流量用完了怎么辦?這些困擾大家的小疑問,今天豆寶一次性普及給你!教你玩轉(zhuǎn)豆卡 接好,不謝~
1.什么是豆卡這個(gè)還不知道的豆友們,就要拉出去“打屁屁”!什么是豆卡,他有哪些號(hào)段及哪些城市,最重要的是告訴你豆卡有多好用!
2.資費(fèi)怎么算這個(gè)是豆友們最關(guān)心的,這里清清楚楚把賬算,來吧!看看你用的是什么套餐。話說套餐都貼心,根據(jù)豆友不同的需求,推出i自由套餐、真實(shí)惠套餐、真劃算套餐,各種加油包多種套餐讓你挑!
3.如何辦卡辦卡什么的最開心啦!這里有N種辦卡方式??靵砜纯?/p>
4.如何充值
登陸官方網(wǎng)站,首頁右邊有快速充值入口,支持直充和充值卡充值
登陸紅豆官網(wǎng)
5.如何補(bǔ)實(shí)名制重拳治理 常抓不懈 實(shí)名認(rèn)證 人人有責(zé)
6.網(wǎng)站及微信平臺(tái) 客服
7.常見問題與解答在這里,豆寶會(huì)告訴你好多你都想不到但是又很有用的問題!快來戳!
面對(duì)效率慢、體驗(yàn)差的H5,前端性能測(cè)試應(yīng)該如何把控?

作者| 蔡媚霞 (紅豆 Live 軟件測(cè)試工程師)
編輯| 尾尾
備注| 本文為作者投稿,投稿請(qǐng)發(fā)郵件至luna.han@infoq
一、背景介紹
智能手機(jī)的普及、移動(dòng)互聯(lián)網(wǎng)的發(fā)展、微信異軍突起,都為 H5 的發(fā)展提供了良好的環(huán)境。當(dāng)前,H5 已被廣泛應(yīng)用于營(yíng)銷、廣告、傳播之中。而針對(duì) H5 效率慢、體驗(yàn)差的硬傷,如何做好性能測(cè)試并優(yōu)化其性能就顯得尤為重要。
紅豆Live 是微博子公司有信旗下的一款語音直播產(chǎn)品,有各種 H5 頁面。我們?cè)谧?H5 性能測(cè)試時(shí)進(jìn)行了總結(jié),本文將為大家詳細(xì)介紹 H5 性能測(cè)試的關(guān)注點(diǎn)、測(cè)試工具及常見問題。
二、H5 頁面的劣勢(shì)
HTML5 作為一門重要的開發(fā)語言,有著顯著的優(yōu)勢(shì),其開發(fā)速度快、運(yùn)行效率高、安全性好、可擴(kuò)展性強(qiáng)、開源自由等,但與手機(jī)端原生 APP 相比,H5 頁面還具有以下劣勢(shì):
不穩(wěn)定性比較強(qiáng),頁面跳轉(zhuǎn)時(shí)更加復(fù)雜,運(yùn)行速度容易受網(wǎng)絡(luò)影響,很容易造成不流暢,甚至出現(xiàn)卡頓或卡死現(xiàn)象。由于瀏覽器的導(dǎo)航本身占用一部分屏幕空間,H5 頁面空間比 APP 小,在本身就小的移動(dòng)設(shè)備屏幕中,容易造成信息記憶負(fù)擔(dān)。雖然可以利用滾屏擴(kuò)大頁面,但人腦的短期記憶是不穩(wěn)定的,用戶在滾動(dòng)屏幕的過程中需要臨時(shí)記憶的信息越多,他們的表現(xiàn)就會(huì)越差。導(dǎo)航不明顯,原有底部導(dǎo)航消失,有效的導(dǎo)航遇到挑戰(zhàn)等。交互動(dòng)態(tài)效果受到限制,影響一些頁面場(chǎng)景、邏輯的理解。功能實(shí)現(xiàn)相比 APP 存在差距,用戶重復(fù)使用難度大,用戶粘性差。
二、H5 性能優(yōu)化技巧1. 代碼結(jié)構(gòu)和設(shè)計(jì) 壓縮組件
用戶使用 H5 功能過程中,絕大多數(shù)時(shí)間都花在網(wǎng)絡(luò)請(qǐng)求上,所以減少使用緊張的網(wǎng)絡(luò)資源在提高性能上能取得良好的收益。組件壓縮就是一種減少網(wǎng)絡(luò)傳輸消耗的辦法。
從HTTP 請(qǐng)求返回資源中的 HTML,JS,CSS,XML 等都可以設(shè)置壓縮。對(duì)于已經(jīng)壓縮過的資源(如圖片音樂等)不需要再次壓縮,收益不高,而且增加 CPU 負(fù)擔(dān)。
JS,CSS 可以常通過去掉空格和回車來壓縮,再經(jīng)過 GZIP 壓縮,能達(dá)到良好的壓縮效果。
壓縮方法:在 HTTP 請(qǐng)求中設(shè)置所接受到壓縮方式,在 Server 端對(duì) Response 資源進(jìn)行壓縮再傳給瀏覽器。一般使用 GZIP 設(shè)置 content-Encoding 字段。
設(shè)計(jì)技巧
CSS 放在頂部、JavaScript 寫在底部或異步:DOM 樹構(gòu)建完成后,CSS 要放到 HTML 代碼的開頭的 head 標(biāo)簽結(jié)束前。如果網(wǎng)頁是動(dòng)態(tài)生成的,那么在 head 代碼完成后可以頁面輸出,這樣瀏覽器就會(huì)更快地解析出來 head 中的內(nèi)容,開始下載 CSS 文件資源。而 CSS 放在底部則會(huì)引起重新繪制,用戶會(huì)感受到“閃屏”的不好體驗(yàn)。
CSS 使用技巧
正確使用 Display 屬性,因?yàn)?Display 屬性會(huì)影響頁面的渲染避免圖片和 iFrame 等空 Src盡量避免重設(shè)圖片大小避免CSS 表達(dá)式移除空的 CSS 規(guī)則不濫用 Web 字體、Float不聲明過多的 Font-Size值為0 時(shí)不需要單位標(biāo)準(zhǔn)化各種瀏覽器的前綴避免讓選擇符看起來像正則表達(dá)式
JS 在下載的時(shí)候會(huì)引起兩個(gè)問題:阻止網(wǎng)頁內(nèi)容的展示并組織其他資源下載。下載 JS 時(shí)候,并行下載機(jī)制失效。并且在 JS 中可能包括 Document.write 等改變頁面布局的操作,所以渲染引擎會(huì)等待 JS 下載完成再開始渲染。用戶側(cè)頁面加載時(shí)間會(huì)因?yàn)榈却兊酶L(zhǎng)。
關(guān)于緩存
添加緩存的最終目的是為了減少 HTTP 請(qǐng)求,最終達(dá)到提升性能的效果,所有靜態(tài)資源都要在服務(wù)器端設(shè)置緩存,并且盡量使用長(zhǎng) Cache 緩存一切可緩存的資源。
2. 網(wǎng)絡(luò)請(qǐng)求 HTTP 請(qǐng)求個(gè)數(shù)
有統(tǒng)計(jì)證明:一個(gè)網(wǎng)頁最終到達(dá)終端用戶有 80% 的時(shí)間都是在 JS,CSS,圖片,MP3,F(xiàn)lash 等資源的 HTTP 請(qǐng)求。另一方面,HTTP 請(qǐng)求的數(shù)量也是有限制的,瀏覽器對(duì)同一個(gè)域名有連接數(shù)限制,不同瀏覽器內(nèi)核、不同版本的請(qǐng)求數(shù)不盡相同,大部分的并發(fā)請(qǐng)求數(shù)是 6 個(gè)。通過夠控制 HTTP 請(qǐng)求的數(shù)量,減少 HTTP 請(qǐng)求時(shí)間,達(dá)到減少網(wǎng)頁加載和呈現(xiàn)的時(shí)間,能帶來更好的用戶體驗(yàn)。
圖片格式和大小是否合適
圖片格式:H5 中常用的圖片格式有 WebP、JPG 和 PNG8。其中 WebP 的圖片最小,但在 IOS 或者 Android4.0 以下的系統(tǒng)中可能會(huì)有兼容性問題需要解決。JPG 是最常使用的方案,大小適中,解碼速度快,兼容性問題也基本不存在,在 H5 的應(yīng)用中使用起來性價(jià)比最高的方案。如果有 PNG24|32 圖片,盡量將其轉(zhuǎn)換層 PNG8,能極大減少圖片大小。BMP 是未壓縮的圖片格式,應(yīng)該避免使用。
圖片尺寸:當(dāng)前移動(dòng)設(shè)備中常用個(gè)尺寸規(guī)格為 480×800、600×1024、720×1280,800×1280 等,保證提供的原圖能夠被呈現(xiàn),避免在代碼中調(diào)整圖片大小。
避免非 200 返回值
每一個(gè) HTTP 請(qǐng)求都有一個(gè)相對(duì)于的返回狀態(tài)標(biāo)志當(dāng)次請(qǐng)求是否如期完成,如:
1:請(qǐng)求收到,這些狀態(tài)代碼表示臨時(shí)的響應(yīng)。
2:操作成功,這類狀態(tài)代碼表明服務(wù)器成功地接受了客戶端請(qǐng)求。
3:重定向,客戶端瀏覽器必須采取更多操作來實(shí)現(xiàn)請(qǐng)求。
4:客戶端錯(cuò)誤,發(fā)生錯(cuò)誤,客戶端似乎有問題。
5:服務(wù)器錯(cuò)誤,服務(wù)器由于遇到錯(cuò)誤而不能完成該請(qǐng)求。
所以,如果有 HTTP 請(qǐng)求返回為非 200 的狀態(tài)碼,我們認(rèn)為這一次請(qǐng)求時(shí)無意義的,占用了稀缺的網(wǎng)絡(luò)資源,所應(yīng)該避免非 200 的返回狀態(tài)碼。
三、性能測(cè)試工具
推薦采用 Chrome 開發(fā)者工具進(jìn)行性能測(cè)試,該工具有以下優(yōu)點(diǎn):
支持移動(dòng)端 H5 在 PC 端遠(yuǎn)程調(diào)試,能夠?qū)唧w的移動(dòng)端設(shè)備進(jìn)行測(cè)試;集成了 Page Speed;提供Network 面板,展示瀑布流視圖,各類資源清晰羅列,還提供圖的縮略圖,方便查看圖片大小尺寸和冗余或缺失;提供TimeLine 面板,展示 CPU、內(nèi)存、FPS 等性能數(shù)據(jù)。
下面看下參考 Google 官方網(wǎng)站,重點(diǎn)介紹 Chrome 開發(fā)者工具中的 Network 和 Timeline 面板。
1.Network 面板
Network 面板可以記錄頁面上的網(wǎng)絡(luò)請(qǐng)求的詳情信息,從發(fā)起網(wǎng)頁頁面請(qǐng)求 Request 后分析 HTTP 請(qǐng)求后得到的各個(gè)請(qǐng)求資源信息(包括狀態(tài)、資源類型、大小、所用時(shí)間、Request 和 Response 等),可以根據(jù)這個(gè)進(jìn)行網(wǎng)絡(luò)性能優(yōu)化。該面板主要包括 5 大塊窗格 (Pane):
Controls 控制 Network 的外觀和功能。Filters 控制 Requests Table 具體顯示哪些內(nèi)容。Overview 顯示獲取到資源的時(shí)間軸信息。Requests Table 按資源獲取的前后順序顯示所有獲取到的資源信息,點(diǎn)擊資源名可以查看該資源的詳細(xì)信息。Summary 顯示總的請(qǐng)求數(shù)、數(shù)據(jù)傳輸量、加載時(shí)間信息。
其中Requests Table 顯示如下信息列:
Name 資源名稱,點(diǎn)擊名稱可以查看資源的詳情情況,包括 Headers、Preview、Response、Cookies、Timing。
Status HTTP 狀態(tài)碼。
Type 請(qǐng)求的資源 MIME 類型。
Initiator 標(biāo)記請(qǐng)求是由哪個(gè)對(duì)象或進(jìn)程發(fā)起的(請(qǐng)求源)。 Parser: 請(qǐng)求由 Chrome 的 HTML 解析器時(shí)發(fā)起的。
Redirect:請(qǐng)求是由 HTTP 頁面重定向發(fā)起的。
Script:請(qǐng)求是由 Script 腳本發(fā)起的。
Other:請(qǐng)求是由其他進(jìn)程發(fā)起的,比如用戶點(diǎn)擊一個(gè)鏈接跳轉(zhuǎn)到另一個(gè)頁面或者在地址欄輸入 URL 地址。
Size 從服務(wù)器下載的文件和請(qǐng)求的資源大小。如果是從緩存中取得的資源則該列會(huì)顯示 (from cache)
Time 請(qǐng)求或下載的時(shí)間,從發(fā)起 Request 到獲取到 Response 所用的總時(shí)間。
Timeline 顯示所有網(wǎng)絡(luò)請(qǐng)求的可視化瀑布流 (時(shí)間狀態(tài)軸),點(diǎn)擊時(shí)間軸,可以查看該請(qǐng)求的詳細(xì)信息,點(diǎn)擊列頭則可以根據(jù)指定的字段可以排序。
2.Timeline 面板
在Chrome 中點(diǎn)擊開發(fā)者工具,打開 Timeline 面板,這個(gè)工具真的很強(qiáng)大,Timeline 工具欄提供了對(duì)于在裝載你的 Web 應(yīng)用的過程中,時(shí)間花費(fèi)情況的概覽,這些應(yīng)用包括處理 DOM 事件, 頁面布局渲染或者向屏幕繪制元素。Timeline 可以通過事件,框架,和實(shí)時(shí)內(nèi)存用量 3 個(gè)方面的數(shù)據(jù)來監(jiān)測(cè)網(wǎng)頁,通過這些數(shù)據(jù),我們可以方便的找出頁面中存在問題的地方。該面板主要包括 4 大塊窗格 (Pane):
Controls 錄制開關(guān)和控制錄制過程中需要記錄哪些信息。Overview 網(wǎng)頁性能的概要信息。Flame Chart CPU 堆棧軌跡的可視化圖表 (火焰圖)。在圖表里面有 1 到 3 條虛豎線。Details 當(dāng)選擇一個(gè)指定的事件后,會(huì)顯示這個(gè)事件的更多信息;當(dāng)沒有選擇事件時(shí),會(huì)顯示指定的時(shí)間幀信息。Flame Chart 里面的虛豎線含義:藍(lán)色標(biāo)記 DOMContentLoaded 事件;綠色標(biāo)記第一次的繪制時(shí)間點(diǎn);紅色代表 load 事件。
其中第 2 塊 Overview 顯示了網(wǎng)頁性能相關(guān)的概要信息,可以通過鼠標(biāo)或者區(qū)域邊界上的灰色滑塊來拖出一個(gè)指定區(qū)域范圍,F(xiàn)lame Chart 會(huì)跟著局部放大顯示指定區(qū)域內(nèi)的詳情信息。
可以通過鍵盤上的 W,S 來放大和縮小指定區(qū)域,通過 A,D 來向左或向右移動(dòng)指定區(qū)域。這個(gè)窗格包含了三個(gè)圖表:
FPS 每秒幀數(shù) (Frames Per Second)。綠色柱狀條越高,則每秒幀數(shù)越高。在 FPS 圖表上方的紅色塊是標(biāo)記一個(gè)長(zhǎng)幀。CPU 標(biāo)記 CPU 資源的使用情況,這里的面積圖標(biāo)記著消耗 CPU 資源的各類事件。NET 各種顏色的柱狀條分別顯示一種資源。柱狀條越長(zhǎng),代表獲取這個(gè)資源的時(shí)間越長(zhǎng)。
CPU 面積圖中各顏色的含義:藍(lán)色代表 HTML 文件;黃色代表腳本文件;紫色代表樣式文件;綠色代表媒體文件;灰色代表其它雜項(xiàng)文件。NET 圖表柱狀條兩種顏色的含義:較亮的部分表示等待時(shí)間(當(dāng)資源被請(qǐng)求時(shí),直到第一個(gè)字節(jié)被下載的時(shí)間);較暗的部分表示傳輸時(shí)間 (在第一個(gè)和最后一個(gè)字節(jié)被下載之間的時(shí)間)。
四、常見問題及優(yōu)化方案
在請(qǐng)求的資源中有未使用的圖片,造成不必要的資源消耗,應(yīng)過濾掉,如下圖所示。
接口請(qǐng)求次數(shù)太多。
優(yōu)化方案:合并頁面的多個(gè)圖片資源,減少請(qǐng)求次數(shù)。通過 CSS Sprite 將直播間頁面的多個(gè)資源合并(如截圖中標(biāo)注的圖片),再通過 background-image 和 backgorund-position 定位出圖中的小區(qū)域,那么只需要一個(gè) HTTP 請(qǐng)求就可以獲得全部圖片。
事件處理時(shí)間長(zhǎng),每項(xiàng)事件最好控制在 500ms 以內(nèi)。
優(yōu)化方案:
減少重繪和回流
緩存 Dom 選擇與計(jì)算
緩存列表.length
盡量使用事件代理,避免批量綁定事件
盡量使用 ID 選擇器
使用 touchstart、touchend 代替 click,因快影響速度快。
幀率低。應(yīng)用的幀率最好一直保持在 30-60fps,如果太低了,應(yīng)用就會(huì)因?yàn)閬G幀看上去混亂或者抖動(dòng)。
優(yōu)化方案:要想檢查一段時(shí)間內(nèi)的繪制(paint)是另一個(gè)挑戰(zhàn)。如果想知道為什么某個(gè)特定的元素繪制的比較慢,可以把 DOM 樹中的部分元素設(shè)置成 display:none,將它們從布局 / 內(nèi)容樹中移除,并且設(shè)置 visibility:hidden 不讓它們繪制。然后你可以用 Timeline 進(jìn)行錄制以便測(cè)量,看一下繪制時(shí)間,在強(qiáng)制重繪模式中可以觀察(實(shí)驗(yàn)性的)繪制率。(感謝 Paul 提供的竅門)
點(diǎn)擊界面按鈕后,二級(jí)頁面彈出慢。
優(yōu)化方案:可以調(diào)整請(qǐng)求的順序,由拿到數(shù)據(jù)再彈層,變成彈層的同時(shí)取數(shù)據(jù),加快彈層展示時(shí)間.
五、總結(jié)
目前H5 的應(yīng)用非常廣泛,如何把控好 H5 的性能是一門重要的課程。從代碼設(shè)計(jì)可以優(yōu)化 CSS、JS、圖片、緩存等。還可以通過 Chrome 開發(fā)者工具,監(jiān)控 H5 的網(wǎng)絡(luò)請(qǐng)求和加載時(shí)間,找到性能消耗較大的根源,優(yōu)化網(wǎng)絡(luò)請(qǐng)求數(shù)、網(wǎng)絡(luò)加載時(shí)間以及渲染優(yōu)化。
本頁內(nèi)容為企業(yè)、個(gè)人自主上傳或來源網(wǎng)絡(luò),所有資料僅供用戶參考;我單位不對(duì)其版權(quán)負(fù)責(zé)、不保證亦不表示本網(wǎng)的資料全面及準(zhǔn)確無誤,也不保證亦不表示這些資料為最新信息,如因任何原因,本網(wǎng)內(nèi)容或者用戶因倚賴本網(wǎng)內(nèi)容造成任何損失或損害,我單位將不會(huì)負(fù)任何法律責(zé)任。