我優(yōu)化YouTube視頻播放頁面的故事
三年前,當(dāng)我還在YouTube做一名web程序員時,有一位資深的工程師發(fā)了一通牢騷,說播放視頻的頁面體積太大。這個頁面體積已經(jīng)膨脹到了高達(dá) 1.2MB,包含有數(shù)十次的請求。這個工程師公開的宣稱說,“如果他們Quake能在100KB的體積下克隆出我們的頁面,我們沒有理由達(dá)不到這個體 積!”因為我同意他的觀點(diǎn),并且我正在找新的任務(wù),于是就決定接受這個挑戰(zhàn),讓YouTube的視頻播放頁面的體積減到100KB以下。那天晚上從舊金山回家的火車上,我編寫了一個基本的原型。我決定限制頁面上的功能數(shù),只保留一個標(biāo)題,一個視頻播放器,五個相關(guān)視頻,一個分享按鈕,一個插旗工具和十條評 論——是通過AJAX加載的。我把這個任務(wù)命名為“羽毛”。
即使這樣一個有限的功能,頁面的體積仍然達(dá)到250KB。我深入代碼查看,發(fā)現(xiàn)我們的優(yōu)化工具(比如閉包編譯工具)無法清理這個頁面上實際沒有使用 的代碼(也許不該責(zé)備這些工具,這種情況下任何工具都做不到)。想進(jìn)一步減少代碼,唯一的方法就是手工優(yōu)化CSS,JavaScript和圖片。經(jīng)過辛苦 的三天努力,我已經(jīng)把頁面做到了相當(dāng)?shù)木?,但仍然沒有低于100KB。因為我剛剛寫完了一個HTML5視頻播放器,我決定用它來替換體積笨重的 Flash播放器。砰!98KB,只有14個請求。對這個頁面設(shè)置了一些基本監(jiān)視后,我們對一小部分人開放了這個頁面。
經(jīng)過了一周數(shù)據(jù)的收集,數(shù)據(jù)有了,但它們卻讓我困惑。羽毛版下的頁面的總體平均延遲時間實際上是增加的。我減少了總的頁面體積,減少了頁面請求的次數(shù),但數(shù)據(jù)顯示在加載羽毛視頻播放頁卻花了更長的時間。這是不可能的事情。深入挖掘數(shù)據(jù),經(jīng)過在瀏覽器上的反復(fù)試驗,沒有任何結(jié)果。我基本上要放棄這個版本了,我的信仰幾乎被完全擊潰,正在此時,一個同事發(fā)現(xiàn)了其中的奧秘:地理因素。
當(dāng)我們標(biāo)注了數(shù)據(jù)的地理信息,把所有信息按區(qū)域劃分進(jìn)行對比,我們看到了地區(qū),比如東南亞,南美,非洲,甚至西伯利亞等地在流量上呈現(xiàn)的不對稱增加。進(jìn)一步調(diào)查揭示,在這些地區(qū),羽毛版的頁面的平均加載時間超過2分鐘!這意味著,一個普通的視頻,大概1兆左右,會需要20分鐘來加載!人們?yōu)榱说却@個頁面就如此痛苦,更別提視頻了??煽v觀這些地區(qū),他們之前根本無法觀看YouTube,因為等了很久也看不到什么。而在羽毛版下,盡管要等2分鐘才能看到視頻的第一幀,但不管怎樣,事實上是可以看到了。在過去的一周里,羽毛版在這個地區(qū)很受歡迎,所以我們的數(shù)據(jù)被他們弄的完全不平均了。大量以前不能觀看YouTube的人現(xiàn)在突然可以了。
通過開發(fā)羽毛,我學(xué)到了一個關(guān)于世界其它地方網(wǎng)絡(luò)狀況的很有價值的認(rèn)識。我們很多人有幸能生活在一個有高速寬帶的地方,但實際上仍然有很大的區(qū)域不是這樣。通過讓客戶端的代碼變少變輕,你就能完全開啟一個新的市場。
[本文英文原文鏈接:Page Weight Matters ]