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