歡迎大家來到2011中國(guó)PHP技術(shù)高峰論壇,論壇有一個(gè)作用就是交流分享。我下面先做一個(gè)小調(diào)查,在座做移動(dòng)開發(fā)的有沒有?有一些同行,有用過手機(jī)當(dāng)當(dāng)網(wǎng)的,有沒有?這證明我們推廣力度還不是很大,我們后期會(huì)有更長(zhǎng)足發(fā)展。我今天主要跟大家分享一下,手機(jī)當(dāng)當(dāng)網(wǎng)通過構(gòu)建統(tǒng)一底層來實(shí)現(xiàn)Wap2.0,以及Android,iPhone的實(shí)踐。
我今天講的主要有三個(gè)議題,首先給大家介紹手機(jī)當(dāng)當(dāng)網(wǎng)有什么樣的功能,能給大家?guī)硎裁礃拥谋憷?。第二是手機(jī)當(dāng)當(dāng)網(wǎng)的現(xiàn)狀,我們開發(fā)到什么樣程度,支持大家能夠做什么。第三個(gè)是講一下手機(jī)當(dāng)當(dāng)網(wǎng)一些架構(gòu),首先看一下手機(jī)當(dāng)當(dāng)網(wǎng)的定位,有兩個(gè)產(chǎn)品線,第一個(gè)是當(dāng)當(dāng)購(gòu)物,當(dāng)當(dāng)購(gòu)物是在手機(jī)上,把原有Wap當(dāng)當(dāng)網(wǎng)功能做了一個(gè)延伸和補(bǔ)充,他可以使你在手機(jī)終端能夠通過這種移動(dòng)設(shè)備來去訪問我們當(dāng)當(dāng)網(wǎng),作為點(diǎn)上這是一個(gè)很大市場(chǎng)份額,但是很多電商都還沒有開始涉足,類似于凡客他有Android,但是他沒有Wap2.0。
我們當(dāng)當(dāng)手機(jī)做的時(shí)候,會(huì)針對(duì)各種不同終端,為什么首先選擇Wap2.0作為切點(diǎn),進(jìn)行第一期開發(fā)。第二個(gè)產(chǎn)品線是當(dāng)當(dāng)讀書,他的目的是促進(jìn)實(shí)體書銷售試讀平臺(tái)。大家經(jīng)??梢钥吹綀?chǎng)景是,你在回家路上,上班途中就可以掏出手機(jī),當(dāng)然在手機(jī)上購(gòu)物還不是非常便捷的情況下,你會(huì)選擇用手機(jī)閱讀,這時(shí)候手機(jī)當(dāng)當(dāng)網(wǎng)提供在線閱讀功能。還有數(shù)字內(nèi)容閱讀與銷售平臺(tái),如果大家用過在線閱讀功能。在中國(guó)移動(dòng)(微博)有一個(gè)數(shù)字閱讀基地,是在杭州,那邊通過這種實(shí)驗(yàn)方式和當(dāng)當(dāng)很類似,像當(dāng)當(dāng)有很多出版商去進(jìn)行合作,可以拿到很多試讀的書目,你可以通過當(dāng)當(dāng)在線閱讀功能就可以了解你想去了解這本書的概括,了解之后就可以進(jìn)行買或者是下載。
手機(jī)購(gòu)物,你在當(dāng)當(dāng)網(wǎng)上通過Wap而方式去訪問的功能,所有版手機(jī)當(dāng)當(dāng)網(wǎng)都全部支持,包括瀏覽,搜索,購(gòu)買的完整購(gòu)物流程。因?yàn)槭謾C(jī)支付還不是特別成熟,大部分商品我們還只是支持貨到付款方式。第二是支持包括查看物流,確認(rèn)收貨,確認(rèn)收貨這個(gè)功能和當(dāng)當(dāng)現(xiàn)在正在開發(fā)快遞,當(dāng)當(dāng)快遞是承包給第三方,為了能夠更好滿足用戶體驗(yàn),監(jiān)控到快遞到了什么位置,快遞系統(tǒng)后面可以實(shí)現(xiàn)這種查看物流,確認(rèn)收貨輔助購(gòu)物流程。手機(jī)購(gòu)物支持促銷品列表,當(dāng)當(dāng)榜,當(dāng)當(dāng)榜無論是在WAP,還是在手機(jī)訪問里面,流量都是比較高的。
還有快速瀏覽商品,支持購(gòu)買和結(jié)算,包括你用短信也可以輸入郵箱和密碼,支持我的訂單,收藏,地址簿管理,個(gè)性化推薦,這是手機(jī)購(gòu)物這條產(chǎn)品線,手機(jī)當(dāng)當(dāng)網(wǎng)可以支持的。另外就是在線讀書,你通過WAP訪問一本書,下面會(huì)有一個(gè)章節(jié)也有一個(gè)試讀,基本上手機(jī)當(dāng)當(dāng)網(wǎng)都可以使用這個(gè)功能。在用戶已登錄狀態(tài)下,可以保持用戶閱讀歷史。后面我們會(huì)增加一些SNS功能,包括增加書簽,書架這些基本閱讀功能。我們目前可以支持文字基本閱讀功能,下載和離線功能,以及互動(dòng)正在開發(fā)功能,后期我們?cè)诤椭袊?guó)移動(dòng)數(shù)字閱讀基地在談合作,推出數(shù)字閱讀還有出版商合作,以及擴(kuò)展當(dāng)當(dāng)網(wǎng)在手機(jī)上面的一些銷售功能。
手機(jī)當(dāng)當(dāng)網(wǎng)他的目標(biāo)就是要覆蓋所有終端設(shè)備,包括WAP,WAP2.0,像諾基亞就會(huì)有一些插件,可以支持手機(jī)一些輔助功能,這都是我們已經(jīng)開發(fā)出來。另外就是Android客戶端,這是在去年年底都已經(jīng)上線功能,在這里就做一個(gè)小小廣告,這個(gè)已經(jīng)上線了,功能是完全支持的,包括貨到付款,個(gè)性化推薦都有。
iPhone是正在開發(fā)的,ipad這都是手機(jī)當(dāng)當(dāng)網(wǎng)需要覆蓋的平臺(tái)??梢钥吹?,如果你在做移動(dòng)開發(fā)的時(shí)候,需要面對(duì)不同這種終端設(shè)備,像諾基亞,Android,比較流行的iPhone,還有很多MTK手機(jī),還有山寨機(jī),還有后面平板電腦,這是面對(duì)各種各樣不同移動(dòng)終端設(shè)備。在移動(dòng)終端設(shè)備上面,又有不同手機(jī)瀏覽器,像UCWEB,還有QQ瀏覽器,在Android里面使用和iPhone里面分別使用的,很多你沒有聽到名字的手機(jī)瀏覽器。面對(duì)各種各樣不同手機(jī)終端設(shè)備,而且在手機(jī)不同終端設(shè)備上面,很多手機(jī)不同瀏覽器如何能夠做到適配,手機(jī)當(dāng)當(dāng)網(wǎng)架構(gòu)就是為了解決這個(gè)問題。
首先你在做這個(gè)項(xiàng)目之前,要了解一下他的需求。通過對(duì)一期版本W(wǎng)AP訪問上線情況來看,可以看到UCWEB訪問量是最大的,這個(gè)SV60,V3,和V5就是諾基亞瀏覽器,可以看到UCWEB wince訪問量最高,剩下就是MSIE6.0,還有NokiaS60V3,還有MSIE4.01。這是在我們后面做適配的時(shí)候會(huì)遇到一些問題,剩下就是訪問量比較小的諾基亞S60V3。
在需求確定以后,我們重點(diǎn)還是支持用戶訪問量比較大的UCWEB這個(gè)版本。在手機(jī)當(dāng)當(dāng)網(wǎng)開發(fā)的時(shí)候遇到一個(gè)問題,移動(dòng)開發(fā)公司不可能單獨(dú)讓你成立像WEB一大批程序員去寫不同業(yè)務(wù)邏輯層,像存儲(chǔ),基本上都采用的是統(tǒng)一API接口方式。在這個(gè)里面,可以從這個(gè)策略上面,就是在當(dāng)當(dāng)業(yè)務(wù)這個(gè)下面有一個(gè)所有的WAP,已經(jīng)獨(dú)立出來核心模塊,比如手機(jī)閱讀,搜索,個(gè)性化推薦,還有購(gòu)物,他都是屬于當(dāng)業(yè)務(wù)里邊一些獨(dú)立模塊。在這種情況下,手機(jī)訪問的時(shí)候,他都是通過業(yè)務(wù)功能去提供這種內(nèi)部API,然后提供給手機(jī)當(dāng)當(dāng)網(wǎng),我們?nèi)フ{(diào)用這種API,在這個(gè)基礎(chǔ)之上去開發(fā)一些前臺(tái)功能,像Android客戶端,手機(jī)這種網(wǎng)站,iPhone客戶端,支持我們的兩條產(chǎn)品線,一個(gè)是手機(jī)購(gòu)物,另外一個(gè)就是手機(jī)閱讀。中間有一些后臺(tái)功能,比如及系統(tǒng),CMS,渠道系統(tǒng),和客服系統(tǒng)。
架構(gòu)的時(shí)候,只能通過統(tǒng)一WAPAPI方式,但是有一種情況可能就需要涉及到讀寫數(shù)據(jù)庫(kù)。比如我們?cè)谑謾C(jī)里面都會(huì)提供在線反饋,你去提一些問題我們?cè)鰪?qiáng)手機(jī)功能,支持手機(jī)功能,這些需要讀寫數(shù)據(jù)庫(kù),大部分功能都通過API的方式讀取。在API上面我們封裝了一個(gè)數(shù)據(jù)訪問層,這個(gè)數(shù)據(jù)訪問層除了在線提問題去反饋,大部分都是對(duì)API進(jìn)行了第二次封裝。因?yàn)闃I(yè)務(wù)這邊提過來,獨(dú)立子模塊API不可能完全滿足手機(jī)當(dāng)當(dāng)網(wǎng)的所有需求,在這種情況下我們需要把有些API進(jìn)行組合,組合出來數(shù)據(jù)訪問層,在數(shù)據(jù)訪問層根據(jù)不同業(yè)務(wù)再去組合成業(yè)務(wù)層,上面才是針對(duì)不同業(yè)務(wù)層,針對(duì)業(yè)務(wù)場(chǎng)景進(jìn)行分層架構(gòu),最后去寫應(yīng)用層。
在應(yīng)用層的時(shí)候根據(jù)不同的終端設(shè)備,比方說像WAP2.0,WAPTOUCH這種應(yīng)用場(chǎng)景,采用就是HP這種標(biāo)準(zhǔn)格式,展示在客戶端上。像Android和iPhone,數(shù)據(jù)格式是接上這種數(shù)據(jù)格式。這是我們整體項(xiàng)目節(jié)目組織,可以看到,上面是一個(gè)統(tǒng)一ddmobile,做統(tǒng)一的數(shù)據(jù)底層。大家對(duì)移動(dòng)開發(fā)了解多的話,可以看到FaceBook他采用的是另外一種方式,沒有像我們ddwap,ddtouch,ddiPhone,在ddAndroid上面就做不同表面層,做終端設(shè)備。FaceBook會(huì)通過UA,每個(gè)手機(jī)訪問網(wǎng)站會(huì)發(fā)給服務(wù)器端一個(gè)標(biāo)識(shí),可以判斷你的來源是什么,用的什么瀏覽器,機(jī)型。
我們這邊就用統(tǒng)一底層,像剛剛前面所看到的這一個(gè),會(huì)把WAP模塊所提供API做數(shù)據(jù)封裝,API去進(jìn)行組合,然后做這個(gè)數(shù)據(jù)訪問層,ddwap,和Android就可以帶來一次性編寫,統(tǒng)一底層減少你的開發(fā)成本。比方說我需要增加一個(gè)在購(gòu)物流程里面,增加一個(gè)切合功能的話,在原有你要去進(jìn)行開發(fā)的時(shí)候,可能要針對(duì)不同終端,比如WAP要單獨(dú)開發(fā)Android,iPhone,我都需要重新去寫一套從上到下,從表現(xiàn)層一直到最后的數(shù)據(jù)訪問層全部要重新編寫一下。在這種情況下只用修改ddmobile,上面ddtouch只是一個(gè)表現(xiàn)層功能,用這種方式可以減少開發(fā)周期,而且維護(hù)成本,沒有像你單獨(dú)開發(fā)各個(gè)不同版本成本要高。
在移動(dòng)方面,像WAP傳統(tǒng)互聯(lián)網(wǎng)還有很大差異。在這方面我們會(huì)進(jìn)行一些處理,像WAP我們就使用最經(jīng)典的方式,采用據(jù)的css文件。整個(gè)引用css只有3K,你能看到頁面表現(xiàn),這是沒有經(jīng)過壓縮的版本,經(jīng)過壓縮今年到1K。移動(dòng)開發(fā)除了流量,還有一個(gè)就是性能,可以看到所有定不同的方式來寫。在圖片處理上,如果大家訪問過,可以試一試,體驗(yàn)一下在原來版本里面,你要去訪問類似于這種情況的話,顧客評(píng)分,每個(gè)星都需要摁一下。帶來第一個(gè)用戶請(qǐng)求數(shù)量會(huì)多,因?yàn)樵谶@個(gè)地方顧客評(píng)論是5個(gè)怎么辦,就需要發(fā)起5次請(qǐng)求,這對(duì)服務(wù)器也是有壓力的。
而且用戶在體驗(yàn)的時(shí)候,我如果想從最上邊,一直拉到最下邊,這樣的話他只能一個(gè)星要播一次按鍵,這種情況下我們?cè)趺慈ソ鉀Q呢?需要對(duì)圖片進(jìn)行二次處理。比方說他是五星,就要調(diào)用五星一個(gè)整合,因?yàn)樗皇侨プ稣故?。這樣既減輕服務(wù)器壓力,又給用戶帶來較高的用戶體驗(yàn)。這個(gè)是我們?cè)趫D片,剩下還有很多,在前臺(tái)。因?yàn)橄袷謾C(jī)當(dāng)當(dāng)網(wǎng)大多數(shù)功能都是啟用API這種方式,大多數(shù)功能在API上面進(jìn)行封裝,更多是在展現(xiàn)這一層。所以,我們會(huì)在前端做很多事情。
如果調(diào)用API都會(huì)存在一些問題,像這個(gè)函數(shù)調(diào)動(dòng)速度,以及生產(chǎn)環(huán)境,CPU等等都會(huì)有一些性能,調(diào)用次數(shù)。我們使用是xhprof分析程序效率,大家都很熟悉在FaceBook2009年3月的時(shí)候就已經(jīng)公開這個(gè)源代碼。我們?cè)谶@個(gè)地方也采用這種方式,看看手機(jī)當(dāng)當(dāng)網(wǎng)開發(fā)的整個(gè)程序效率。在這個(gè)里面,也是一個(gè)列表頁,你如果配置以后,訪問這個(gè)分析頁面就有一個(gè)xhprof,最后會(huì)出一個(gè)分析性能表。
而且除了這種方式以外,最后呈現(xiàn)出來這種效果。你可以知道你應(yīng)用程序的瓶頸是在哪?前面講的是這個(gè)WAP向低端手機(jī),我說低端不是指性能差,而是針對(duì)于iPhone和Android這種智能機(jī)而言。像Android和iPhone,開發(fā)可以采用通用原生OI空間,面臨情況也是一樣。我們想做的最終效果是為了能夠?qū)崿F(xiàn)做一套底層代碼,最后在不同終端設(shè)備上展示都是一樣效果,能夠適應(yīng)不同終端設(shè)備展示。
我們?cè)贏ndroid,iPhone上采用的就是這種HTML5和CSS3的方式,去實(shí)現(xiàn)通過客戶端請(qǐng)求,返回到客戶端,從客戶端訪問服務(wù)器端,服務(wù)器端訪問代碼方式呈現(xiàn)給用戶。我們通過開發(fā)之后,在各個(gè)不同手機(jī)瀏覽器版本上面能看到的效果。左邊第一個(gè)是UC Web,還有Opera Mini,還有右邊手機(jī)默認(rèn)瀏覽器,展示效果大四都是相同的。
在Android和iPhone,我們只是在界面表現(xiàn)不同,底下內(nèi)部核心代碼都是底層API來組成代碼封裝。我的分享就到這里,謝謝。 |