H5前端性能測試快速入門

一、測試關(guān)注指標(biāo)

Http相關(guān):
1阳啥、Http請求個(gè)數(shù)

有統(tǒng)計(jì)證明:一個(gè)網(wǎng)頁最終到達(dá)終端用戶有80%的時(shí)間都是js,CSS财喳,圖片察迟,mp3,flash等資源的http請求耳高。另一方面扎瓶,http請求的數(shù)量也是有限制的,瀏覽器對同一個(gè)域名有連接數(shù)限制泌枪,不同內(nèi)核概荷、版本的瀏覽器請求數(shù)不盡相同,大部分的并發(fā)請求數(shù)是6個(gè)碌燕。
通過夠控制http請求的數(shù)量误证,減少http請求時(shí)間,達(dá)到減少網(wǎng)頁加載和呈現(xiàn)的時(shí)間修壕,能帶來更好的用戶體驗(yàn)愈捅。
優(yōu)化方案:


(1)雪碧圖:即CSS Sprite,也稱CSS精靈慈鸠,是一種CSS圖像合并技術(shù)蓝谨,該方法是將小圖標(biāo)和背景圖像合并到一張圖片上,然后利用CSS的背景定位來顯示需要顯示的圖片部分。
如圖有16個(gè)icon譬巫,每一次取圖片都需要一個(gè)http請求稽亏,如果通過CSS雪碧圖將16個(gè)資源合并,再通過background-image和backgorund-position定位出雪碧圖中的小區(qū)域缕题,那么只需要一個(gè)http請求就可以獲得全部圖片。

(2)圖片地圖:是一種小圖合并大圖的范式胖腾,和雪碧圖相似烟零,區(qū)別僅在實(shí)現(xiàn)原理上有不同,雪碧圖僅僅是通過CSS的方式來呈現(xiàn)圖片的某個(gè)局部咸作,而圖片地圖是從html代碼的方式來控制顯示區(qū)域锨阿。

(3)JS&CSS合并:將多個(gè)小的js、CSS合并成一個(gè)大的js记罚、CSS文件墅诡,間接達(dá)到減少http請求的目的。

2桐智、組件是否壓縮

<b>壓縮方法:</b>在http請求中設(shè)置所接受的壓縮方式末早,在Server端對Response資源進(jìn)行壓縮再傳給瀏覽器。一般使用GZIP設(shè)置content-Encoding字段说庭。

<b>壓縮對象:</b>http請求返回資源中的html然磷,js,CSS刊驴,xml等都可以設(shè)置壓縮姿搜,值得注意的是我們不需要對圖片音樂等資源設(shè)置壓縮,因?yàn)檫@些資源本身已經(jīng)壓縮過了捆憎,再次壓縮收益并不高舅柜,而且增加CPU負(fù)擔(dān)。Js躲惰,CSS我們通常通過去掉空格和回車來壓縮致份,再經(jīng)過GZIP壓縮,能達(dá)到良好的壓縮效果础拨。

通常來說知举,組件壓縮是一種增加CPU壓縮解壓縮時(shí)間來減少網(wǎng)絡(luò)傳輸消耗的辦法,并且通常網(wǎng)絡(luò)資源較cpu資源更緊張太伊,所以對合適的對象設(shè)置壓縮能個(gè)取得良好的收益雇锡。

3、圖片格式和大小是否合適

<b>圖片格式:</b>顯示效果較好的圖片格式中僚焦,有webp锰提、jpg和png24/32這幾種常見的圖片格式。一般來說,webp的圖片最小立肘,但在iOS或者android4.0以下的系統(tǒng)中可能會(huì)有兼容性問題需要解決边坤。
<li>JPG:</li>JPG是我們最常使用的方案,大小適中谅年,解碼速度快茧痒,兼容性問題也基本不存在,是我們在H5的應(yīng)用中使用起來性價(jià)比最高的方案融蹂。
<li>png8:</li>有些png24/32圖片本身顏色較為簡單旺订,將其轉(zhuǎn)變?yōu)閜ng8得到的顯示效果很類似,但卻能極大地減少圖片的大小超燃。Png24或png32区拳,一般來說,顯示效果肯定會(huì)比jpg和png8更好意乓,但是實(shí)際上人眼很難感知出來樱调,所以在H5應(yīng)用中要避免這種格式的大圖片。當(dāng)然bmp這種未壓縮的圖片格式就不應(yīng)該考慮届良。

<b>圖片尺寸:</b>獲取圖片尺寸時(shí)候應(yīng)該考慮圖片具體的展示場景笆凌,如當(dāng)前移動(dòng)設(shè)備中常用尺寸規(guī)格為480×800、600×1024士葫、720×1280菩颖,800×1280等,從原圖來保證圖片能夠被呈現(xiàn)为障,而不是通過代碼對圖片放大或縮小晦闰。

<b>圖片壓縮:</b>對于jpg,png格式圖片來說本身就已經(jīng)經(jīng)過了壓縮鳍怨,這對于稀缺的帶寬資源是不夠的呻右,我們還需要更加優(yōu)化的壓縮算法,通過一系列的圖片壓縮工具如TinyPNG, Smush.it可以得到更好的壓縮且圖片質(zhì)量不變鞋喇。

4声滥、CSS放在頂部

在瀏覽器渲染過程中談到,dom樹構(gòu)建完成后侦香。CSS要放到html代碼的開頭的head標(biāo)簽結(jié)束前落塑。如果網(wǎng)頁是動(dòng)態(tài)生成的,那么在head代碼完成后可以頁面輸出罐韩,這樣瀏覽器就會(huì)更快地解析出來head中的內(nèi)容憾赁,開始下載CSS文件資源蓉媳。而CSS放在底部則會(huì)引起重新繪制婶希,用戶側(cè)感受到“閃屏”的不好體驗(yàn)。

5期揪、JS放在底部

JS在下載的時(shí)候會(huì)引起兩個(gè)問題:阻止網(wǎng)頁內(nèi)容的展示并組織其他資源下載。在“減少http數(shù)量”部分中晦款,我們談到各種資源的下載是并行的炎功,根據(jù)不同域名不同瀏覽器內(nèi)核并行數(shù)量有所不同,所以下載js時(shí)候缓溅,并行下載機(jī)制失效蛇损。并且在js中可能包括document.write等改變頁面布局的操作,所以渲染引擎會(huì)等待js下載完成再開始渲染坛怪。所以用戶側(cè)頁面加載時(shí)間會(huì)因?yàn)榈却兊酶L淤齐。

6、JS &CSS壓縮

首先舉一個(gè)例子酝陈,相信大家在使用jquery時(shí)注意到有兩個(gè)文件jquery-1.4.2.js和 jquery-1.4.2.min.js,這里的min.js就是js方式的壓縮結(jié)果毁涉。具體壓縮方法如下:

/*CC的示例代碼*/
function echo(stringA,stringB){
    var hello = "你好";
    alert("hello world");
}
/*CC的示例代碼*/

第一步:“精簡”沉帮,去掉js文件中的空格換行符贫堰、注釋等信息穆壕,使得js代碼變得緊湊而不失其語義。如:
function echo(stringA,stringB){var hello="你好"其屏;alert("hello world")};
第二步:”混淆”喇勋,將方法名變量名用更簡短的方式來表達(dá),如變量可以用一個(gè)字符來表示偎行。如:
function echo(c,b){var a="你好",alert("hello world")};
優(yōu)點(diǎn):從js&CSS文件的源頭進(jìn)行壓縮川背,縮小了http傳輸過程數(shù)據(jù)大小。
缺點(diǎn):通過兩步壓縮后蛤袒,再來閱讀js&CSS源碼是非诚ㄔ疲苦難的。并且經(jīng)過壓縮的代碼可能和另一個(gè)壓縮的代碼因變量被共用而引起語法錯(cuò)誤妙真。
最后缴允,經(jīng)過壓縮的腳本文件使用務(wù)器端GZIP來壓縮,能夠壓使文件縮得更加的淋漓盡致珍德。

7练般、是否添加緩存

緩存功能是一種減少http請求的方式,如下有兩種方式設(shè)置緩存锈候,測試時(shí)注意常用資源是否設(shè)置緩存:
<b>Cache-Control</b>
“no-cache”指示請求或響應(yīng)消息不能緩存(HTTP/1.0用Pragma的no-cache替換)

“no-store”用于防止重要的信息被無意的發(fā)布薄料。在請求消息中發(fā)送將使得請求和響應(yīng)消息都不使用緩存。

“max-age”指示客戶機(jī)可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)泵琳。

“max-stale”指示客戶機(jī)可以接收超出超時(shí)期間的響應(yīng)消息都办。如果指定max-stale消息的值嫡锌,那么客戶機(jī)可以接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。

“min-fresh” “=” delta-seconds指示客戶機(jī)可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)琳钉。

<b>Expires:</b>
表示存在時(shí)間势木,允許客戶端在這個(gè)時(shí)間之前不去檢查(發(fā)請求),等同max-age的效果歌懒。但是如果同時(shí)存在啦桌,則被Cache-Control的max-age覆蓋。

<b>設(shè)置方式:</b>
通過HTTP的META設(shè)置expires和cache-control

8及皂、避免非200返回值

每一個(gè)http請求都有一個(gè)相對于的返回狀態(tài)標(biāo)志當(dāng)次請求是否如期完成甫男,如:

1xx:請求收到,這些狀態(tài)代碼表示臨時(shí)的響應(yīng)验烧。

2xx:操作成功板驳,這類狀態(tài)代碼表明服務(wù)器成功地接受了客戶端請求。

3xx:重定向碍拆,客戶端瀏覽器必須采取更多操作來實(shí)現(xiàn)請求若治。

4xx:客戶端錯(cuò)誤,發(fā)生錯(cuò)誤感混,客戶端似乎有問題端幼。

5xx:服務(wù)器錯(cuò)誤,服務(wù)器由于遇到錯(cuò)誤而不能完成該請求弧满。

所以婆跑,如果有http請求返回為非200的狀態(tài)碼,我們認(rèn)為這一次請求時(shí)無意義的庭呜,占用了稀缺的網(wǎng)絡(luò)資源滑进,所應(yīng)該避免非200的返回狀態(tài)碼。

9募谎、使用CDN

CDN內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network)將源站內(nèi)容發(fā)布到最接近用戶的“邊緣”節(jié)點(diǎn)郊供,使用戶可就近取得所需內(nèi)容,提高用戶訪問的響應(yīng)速度和成功率近哟。解決因分布驮审、帶寬、服務(wù)器能力帶來的訪問延遲高問題吉执,提供一系列加速解決方案疯淫。所以,如果H5的用戶分散在全國各地戳玫,建議盡可能的將資源放到CDN熙掺。
時(shí)間相關(guān):

白屏?xí)r間:用戶首次看到網(wǎng)頁有內(nèi)容的時(shí)間,即第一次渲染流程完成時(shí)間咕宿。但是在傳統(tǒng)的采集方式里币绩,是在HTML的head標(biāo)簽結(jié)尾里記錄時(shí)間戳蜡秽,來計(jì)算白屏?xí)r間。在這個(gè)時(shí)刻缆镣,瀏覽器開始解析body標(biāo)簽內(nèi)的內(nèi)容芽突。而現(xiàn)代瀏覽器不會(huì)等待CSS樹和DOM樹(整個(gè)body標(biāo)簽解析完成)構(gòu)建完成才開始繪制,而是馬上開始顯示中間結(jié)果董瞻。所以經(jīng)常在低網(wǎng)速的環(huán)境中寞蚌,觀察到頁面由上至下緩慢顯示完,或者先顯示文本內(nèi)容后再重繪成帶有格式的頁面內(nèi)容钠糊。

首屏?xí)r間:是指用戶看到第一屏挟秤,即整個(gè)網(wǎng)頁頂部大小為當(dāng)前窗口的區(qū)域,顯示完整的時(shí)間〕椋現(xiàn)代瀏覽器處理圖片資源時(shí)是異步的艘刚,會(huì)先將圖片長寬應(yīng)用于頁面排版,然后隨著收到圖片數(shù)據(jù)由上至下繪制顯示的截珍。并且瀏覽器對每個(gè)頁面的TCP連接數(shù)限制攀甚,使得并不是所有圖片都能立刻開始下載和顯示。因此我們在dom樹構(gòu)建完成后即可遍歷獲得所有在設(shè)備屏幕高度內(nèi)的所有圖片資源標(biāo)簽笛臣,在所有圖片標(biāo)簽中添加document.onload事件云稚,在整頁加載完成(window.onLoad事件發(fā)生)時(shí)遍歷圖片標(biāo)簽并獲得之前注冊的document.onload事件時(shí)間的最大值隧饼,該最大值減去navigationStart即認(rèn)為近似的首屏?xí)r間沈堡。

完整頁面時(shí)間:整個(gè)H5頁面資源全部被下載的時(shí)間。相對于首屏?xí)r間燕雁,頁面完整下載時(shí)間往往更高诞丽,當(dāng)頁面大小恰好和窗口大小相等時(shí),可認(rèn)為完整頁面下載時(shí)間為首屏?xí)r間拐格。首屏?xí)r間和完整頁面時(shí)間我們通過注入js代碼到webview中的方式來實(shí)現(xiàn)僧免;具體實(shí)現(xiàn)上,在WebChromeClient的onReceivedTitle事件被觸發(fā)時(shí)注入我們的js代碼捏浊,然后通過WebChromeClient的onJsPrompt事件來獲取懂衩。

首資源下載時(shí)間:從開始下載到第一個(gè)資源均下載完成的時(shí)間,不包括頁面繪制時(shí)間金踪。

總資源下載時(shí)間:從開始下載到所有資源均下載完成的時(shí)間浊洞,不包括頁面繪制時(shí)間。

用戶可操作時(shí)間:從頁面開始加載到用戶操作可響應(yīng)的時(shí)間胡岔。

上述各種時(shí)間指標(biāo)應(yīng)根據(jù)當(dāng)前H5的具體情況法希,選擇合適的測試指標(biāo)。

WebView相關(guān):

在android和IOS上測試H5性能靶瘸,測試員還應(yīng)該關(guān)注因加載H5而引起的app常規(guī)性能指標(biāo)苫亦。

內(nèi)存:加載頁面前后內(nèi)存變化毛肋,可間接反映H5中資源數(shù)量和大小,如dom數(shù)量屋剑,圖片大小润匙。

CPU:當(dāng)頁面中資源樣式復(fù)雜,強(qiáng)調(diào)視覺效果時(shí)饼丘,測試員可觀察CPU占用率來反映H5繪制質(zhì)量趁桃。如果CPU長期處于高占用率,可考慮降低高計(jì)算量的視覺效果等手段肄鸽。

FPS:幀率尤其在有視頻和動(dòng)畫效果的H5中卫病,測試員應(yīng)該重點(diǎn)關(guān)注,防止嚴(yán)重的卡頓流出典徘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蟀苛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逮诲,更是在濱河造成了極大的恐慌帜平,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梅鹦,死亡現(xiàn)場離奇詭異裆甩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)齐唆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門嗤栓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箍邮,你說我怎么就攤上這事茉帅。” “怎么了锭弊?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵堪澎,是天一觀的道長。 經(jīng)常有香客問我味滞,道長樱蛤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任剑鞍,我火速辦了婚禮昨凡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攒暇。我一直安慰自己土匀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布形用。 她就那樣靜靜地躺著就轧,像睡著了一般证杭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妒御,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天解愤,我揣著相機(jī)與錄音,去河邊找鬼乎莉。 笑死送讲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的惋啃。 我是一名探鬼主播哼鬓,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼边灭!你這毒婦竟也來了异希?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤绒瘦,失蹤者是張志新(化名)和其女友劉穎称簿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惰帽,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡憨降,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了该酗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片授药。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垂涯,靈堂內(nèi)的尸體忽然破棺而出烁焙,到底是詐尸還是另有隱情航邢,我是刑警寧澤耕赘,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站膳殷,受9級(jí)特大地震影響操骡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赚窃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一册招、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勒极,春花似錦是掰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炫彩。三九已至,卻和暖如春絮短,著一層夾襖步出監(jiān)牢的瞬間江兢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工丁频, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杉允,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓席里,卻偏偏與公主長得像叔磷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子奖磁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容