柴春燕:当当网与多样化的终端

欢迎大家来到2011中国[url=javascript:;]PHP[/url]技术高峰论坛,论坛有一个作用就是交流分享。我下面先做一个小调查,在座做移动开发的有没有?有一些同行,有用过手机当当网的,有没有?这证明我们推广力度还不是很大,我们后期会有更长足发展。我今天主要跟大家分享一下,手机当当网通过构建统一底层来实现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,每个手机访问网站会发给[url=javascript:;]服务器[/url]端一个标识,可以判断你的来源是什么,用的什么浏览器,机型。 我们这边就用统一底层,像刚刚前面所看到的这一个,会把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来组成代码封装。我的分享就到这里,谢谢。  
原文地址:https://www.cnblogs.com/gxldan/p/4066778.html