以互聯(lián)網(wǎng)思維做好客戶端軟件
加入愛(ài)奇藝的時(shí)間不長(zhǎng),但我感受到的震撼卻不小。在外企打拼了十幾個(gè)春秋,今年終于有機(jī)會(huì)進(jìn)入一家國(guó)內(nèi)頂尖的互聯(lián)網(wǎng)企業(yè),真真切切地有一番不太一樣的體驗(yàn)。不過(guò),我今天并不想說(shuō)在外企工作與國(guó)內(nèi)企業(yè)的差別。目前,我負(fù)責(zé)“愛(ài)奇藝PPS影音”PC客戶端軟件的研發(fā)。也許有人會(huì)有疑問(wèn):怎么還在做PC軟件?大家不都一窩蜂似的轉(zhuǎn)去做移動(dòng)開(kāi)發(fā)了嗎?然而,大家要明白的是,雖然PC行業(yè)已經(jīng)風(fēng)光不再,但PC飽有的體量仍然是巨大的,并且PC自有其不可替代的價(jià)值;PC軟件還要繼續(xù)做,今天我想說(shuō)一說(shuō)的是,怎樣以互聯(lián)網(wǎng)思維來(lái)做好客戶端軟件。
說(shuō)起互聯(lián)網(wǎng),大家自然便會(huì)想起網(wǎng)站。(順便提一下,愛(ài)奇藝就是以網(wǎng)站起家的;現(xiàn)如今,愛(ài)奇藝的服務(wù)已經(jīng)覆蓋包括PC、MAC、手機(jī)、平板、電視、機(jī)頂盒等各種終端。)想必大家也知道網(wǎng)站與客戶端軟件各有優(yōu)劣吧,比如:網(wǎng)站可以運(yùn)行在任何設(shè)備的瀏覽器上,不需要用戶安裝,也不麻煩用戶升級(jí),能在各個(gè)終端保持統(tǒng)一的用戶體驗(yàn);而相比之下,原生的客戶端軟件運(yùn)行得更快,并且能夠充分利用本地資源為用戶帶來(lái)更加強(qiáng)勁、炫目的功能。(推薦閱讀Jeff Atwood的一篇博文:App會(huì)取代網(wǎng)站嗎?)我們的客戶端軟件是用C++寫的,性能自然不必多說(shuō)。而我們公司的互聯(lián)網(wǎng)基因,也促使我們把網(wǎng)站的眾多優(yōu)點(diǎn)融合進(jìn)了客戶端軟件。
先說(shuō)說(shuō)研發(fā)流程吧?;ヂ?lián)網(wǎng)行業(yè)最大的特點(diǎn)就是變化快。我們求新,必須快速迭代,快速試錯(cuò)。網(wǎng)站采用的是這種開(kāi)發(fā)模式,我們的客戶端軟件開(kāi)發(fā)也可以。我們采用了Scrum敏捷開(kāi)發(fā)流程——兩周一次迭代,每?jī)芍馨l(fā)布一個(gè)版本。我們稱之為“小步快跑”——把大功能拆小,分階段實(shí)現(xiàn),追求微創(chuàng)新。比較一下傳統(tǒng)的軟件開(kāi)發(fā)模式:先制定一份詳盡冗長(zhǎng)的PRD,然后是動(dòng)輒1~3個(gè)月(甚至半年)的開(kāi)發(fā)周期,再加上一個(gè)較長(zhǎng)的穩(wěn)定期來(lái)修復(fù)足夠多的bug,等到發(fā)布產(chǎn)品的時(shí)候,市場(chǎng)環(huán)境早就不一樣了……互聯(lián)網(wǎng)環(huán)境容不得如此慢的節(jié)奏!
上面說(shuō)到了快速試錯(cuò)。那么,怎么試呢?又怎么知道我們是對(duì)還是錯(cuò)呢?這就要依賴數(shù)據(jù)啦!網(wǎng)站有它的先天優(yōu)勢(shì),可以很方便地收集到這些數(shù)據(jù):用戶在網(wǎng)站上停留了多久,點(diǎn)了什么網(wǎng)頁(yè),在網(wǎng)頁(yè)上點(diǎn)了什么按鈕,用戶使用的是什么瀏覽器,同時(shí)有多少人在線,訪問(wèn)的峰值出現(xiàn)在什么時(shí)間段,等等。我們?cè)诳蛻舳死镆布尤肓祟愃频耐哆f代碼。我們還有強(qiáng)大的數(shù)據(jù)統(tǒng)計(jì)和分析團(tuán)隊(duì)的支持,讓我們對(duì)客戶端軟件性能以及用戶行為了如指掌。我們很容易就能知道客戶端軟件的啟動(dòng)耗時(shí)、崩潰率、用戶在我們客戶端里看了哪些視頻、播放是不是有卡頓等信息。在我們嘗試做了一個(gè)新功能、但又不確定用戶是否會(huì)喜歡的時(shí)候,我們也可以通過(guò)一個(gè)小渠道發(fā)布這個(gè)版本,然后在后臺(tái)觀察各種統(tǒng)計(jì)數(shù)據(jù),以此來(lái)幫助我們決定是否應(yīng)該繼續(xù)開(kāi)發(fā)這個(gè)功能,或者在后續(xù)迭代里需要在哪些方面做改進(jìn)。
我們每?jī)芍軐?duì)外發(fā)布一個(gè)版本。我們也深知,發(fā)出去的版本就像潑出去的水,也是我們未來(lái)必須背負(fù)的包袱。時(shí)間一長(zhǎng),客戶端版本碎片化,幾千萬(wàn)用戶手上的版本多達(dá)幾十種。我們固然可以通過(guò)軟件自帶的升級(jí)機(jī)制把最新版本的客戶端送到用戶手上,但出于種種原因,新版本能夠做到高于90%的覆蓋已經(jīng)不錯(cuò)了,而這個(gè)數(shù)字絕對(duì)達(dá)不到100%。然而,網(wǎng)站卻能做到。網(wǎng)站添加了新功能之后,一旦部署,頃刻之間就能被全世界的所有用戶使用上。問(wèn)題是,我們?cè)趺丛诳蛻舳死铽@得像網(wǎng)頁(yè)那樣的靈活性呢?我們的做法是,對(duì)于性能要求不高并且可能會(huì)頻繁調(diào)整的部分,用HTML/JavaScript來(lái)實(shí)現(xiàn),并在客戶端里用內(nèi)嵌瀏覽器打開(kāi)這些網(wǎng)頁(yè);而對(duì)于性能要求高的部分,堅(jiān)決采用我們強(qiáng)大的C++皮膚庫(kù)來(lái)把網(wǎng)頁(yè)本地化。一個(gè)很好的例子就是愛(ài)奇藝影視大全(http://v.iqiyi.com),在與網(wǎng)站保持協(xié)同的基礎(chǔ)上,我們讓它在客戶端里表現(xiàn)出了更為卓越的性能。
在功能實(shí)現(xiàn)方面,我們時(shí)刻保持著一種意識(shí):盡量不把業(yè)務(wù)邏輯在客戶端里寫死。否則的話,一旦業(yè)務(wù)邏輯有變,我們必須修改客戶端的代碼,然后再做全網(wǎng)升級(jí),一來(lái)周期比較長(zhǎng),二來(lái)新版本也做不到100%的覆蓋,結(jié)果就比較被動(dòng)了。舉一個(gè)VIP會(huì)員相關(guān)的例子吧。在客戶端,我們有針對(duì)當(dāng)前登錄用戶的類型來(lái)做不同會(huì)員套餐促銷的需求,具體的業(yè)務(wù)邏輯是:如果當(dāng)前是普通會(huì)員,則跳到白銀套餐的購(gòu)買頁(yè)面(url1);如果當(dāng)前是白銀會(huì)員,則跳黃金套餐頁(yè)面(url2);如果當(dāng)前是黃金會(huì)員,則跳鉑金套餐頁(yè)面(url3)。一些經(jīng)驗(yàn)欠缺的開(kāi)發(fā)人員會(huì)把上述邏輯直接實(shí)現(xiàn)在客戶端軟件里,就像下圖中左邊所示的那樣。遺憾的是,一旦VIP會(huì)員套餐的促銷邏輯有變,比如,要改成對(duì)所有用戶都推銷鉑金套餐,那就慘了!更靈活的實(shí)現(xiàn)方式應(yīng)該像下圖中右邊那樣,客戶端只是調(diào)用一個(gè)相對(duì)固定的url(并帶上必要的參數(shù)),而把具體的業(yè)務(wù)邏輯實(shí)現(xiàn)在服務(wù)器端。
當(dāng)然,上面只是一個(gè)很小的例子。為了在客戶端里獲得足夠的靈活性(不通過(guò)發(fā)布新版本就能滿足業(yè)務(wù)需求),我們還給很多功能加上了云端配置。只要我們發(fā)現(xiàn)某些功能的用戶體驗(yàn)不理想,隨時(shí)都可以調(diào)整控制參數(shù),甚至將其徹底關(guān)閉。我們始終牢記,我們?cè)谧龅牟皇且粋€(gè)單純、孤立的客戶端軟件——我們提供的是一種互聯(lián)網(wǎng)服務(wù)。也因?yàn)槿绱?,我們的客戶端軟件同時(shí)很好地支持了編輯運(yùn)營(yíng)(及時(shí)發(fā)布時(shí)事或?qū)n}、熱門推薦、快速上線或下線節(jié)目等),以及靈活的廣告策略控制。
PC軟件真的沒(méi)落了嗎?其實(shí)不然!也許我們只是需要順應(yīng)潮流,改變一下自己的思維方式。我們相信,只要有用戶存在,每個(gè)終端都是重要的。因此,即使沒(méi)有聚光燈、鮮花或掌聲,我們?nèi)匀辉趫?jiān)持不懈地努力做好產(chǎn)品,全心全意為我們的用戶服務(wù)!
作者:happydeer
來(lái)源:呦呦鹿鳴
- 目前還沒(méi)評(píng)論,等你發(fā)揮!