手机淘宝性能优化

该文章来自于阿里巴巴技术协会(ATA)精选文章。

手机淘宝性能优化

前言

为了满足不同用户的多样性购物需求,过去两年里手淘的业务不断膨胀,已经从单一的购物工具成为了购物内容平台。在手淘业务快速增长的同时,也带来一些副作用,很多操作环节和页面因为承载功能太多,展示的速度变慢,用户等待时间变长。性能优化势在必行。 

我们根据手机淘宝用户的购物操作流程,对主链路进行了划分,分为启动,首页加载,搜索,购物车,下单,支付环节,订单查看等七个环节,每个步骤和模块都做到监控,以量化数据为指导来进行优化。

下面着重就启动,首页,购物车三个业务环节和网络调优,图片下载两个基础能力优化,优化使用的工具来介绍方案。 

一.启动优化

我们通过线下分析工具,线上灰度数据和代码review,发现启动慢主要有3个原因:1)引入了许多提前的初始化;2)在启动阶段主线程,存在耗时的非必要阻塞操作;3)部分主线程的锁操作,导致主线程wait时间较多。

由此制定出优化的方案:

1)启动无网+缓存

执行严格的无网策略,从用户点击图标到首页第一次展示整个过程没有网络交互,所有数据都是缓存或预置数据的方式来获取。这是因为网络IO耗时都比较长,通过将启动阶段的配置信息拉取和首页运营数据的拉取等网络IO后移,减少了时间开销。

 2)Task分级与异步化

我们将启动中的所有task进行梳理和分级,根据级别来调整执行对应task的时机: 

一级:block启动的task,比如基础sdk的初始化,首页页面的创建等。 

二级:可延迟到首页加载成功后再执行的task,比如自动登录,微淘状态拉取,消息数拉取,配置信息拉取,运营数据拉取等操作 。

只有一级task在启动时执行,二级task延迟到启动完成后串行执行,一级task必须没有锁操作,保证主线程不会被阻塞。

 3)懒加载

优化之前在启动过程中有很多业务的初始化操作,现在我们都采用懒加载策略,真正使用时再进行初始化加载,同时懒加载机制可以结合缓存或预置数据的方式来达到更好的效果。

 比如在手淘的五个tab中,在没有优化前,会在启动时将五个tab对应的页面全部创建出来,而这五个页面中,只有首页是可见的,这些页面的创建都会有一定的耗时,而且除了创建以外,可能还会有一些业务逻辑在里面,比如发送一些请求等,那就会对整个启动造成一定的性能损耗。所以在这次优化过程中,我们就使用lazy创建的方式进行优化,启动只创建可见的页面即首页,而其它几个页面,只有在用户点击对应tab时,才进行创建显示,这一个优化减少了近0.5s的耗时。 

 在上述三个主要策略的优化指导下,手淘的启动流程图变为如图1所示的结构(Android情况也类似),从图中可以看出,在主线程中,启动阶段我们只保留了一些必要的初始化,其他一些非必要的操作都被懒加载或者异步化。通过这些策略的调整,我们达到了最开始设定的优化目标。

 

二.首页优化

作为曝光量最高的页面,快速打开,稳定可用,及时更新是三大目标。

在首页,展示的内容大致分为四类:

  • 二级页面的入口,图标,标题和位置相对固定;
  • 顶部的轮播图,一般为六幅图片,作为不同运营模块或活动的入口;
  • 根据用户身份运算出来的推荐商品,店铺
  • 顶部的消息盒子入口,带未读消息数字图标。

 

对于这四类,采用不同的处理方式:

对于1和2,进行了大量的本地cache化工作,将这些入口文字图标缓存在本地,首先展示上次cache内容,即使遇到无网的情况,首页的整体框架页面,cache过的图片和文字都能绘制出来。

本地cache内容会有一个有效时间戳,在绘制完毕后判断如果cache实际过期了,就会异步网络拉取,下载完毕后做页面刷新。

 

 

对于3)采用优化页面结构和层次的方法:推荐商品放在页面最下部,当用户主动滚动上滑时做拉取绘制,避免页面一次拉取数据内容过度。

 对于4)采用lazy化,即延迟处理,在首屏其他内容完成基础绘制后,才调用接口拉取未读消息数量。

 同启动步骤,首页这里也使用了任务异步化,目前主流手机都是多核处理器,部分 task 可以充分利用多核优势,放在异步线程里完成。比如首页的数据量是相对比较大的,这些数据的加载,解析,拼装都是非常耗时的操作,通过将这些耗时操作进行异步化,保证主线程的正常调度,只有等数据都准备好了,才在主线程中进行UI的渲染更新,从而保障了主线程的流畅性。

 

三.购物车优化

购物车已经成为用户的“第二收藏夹”,大量用户通过多终端(PC,手机)不断更新购物车的内容。在本地建立缓存保存数据,及时展示给用户是提升打开购物车页面的必然手段。

但购物车中的商品会根据活动,店家,单一商品数量等产生不同的优惠组合,在端A上添加或删除某一个商品,都会产生总价的复杂变化。而这个价格计算规则客户端是无法实时获取到的,由服务端计算完毕后下发。

所以这就导致购物车的价格展示不仅仅是一个简单的“单品价格*商品数量=总价”的公式。客户端在更新时,不断要拉取到商品数量的变化,也要拉取到总价的变化。

以往是采用用户主动刷新时全量更新的方法,现在优化为差量更新,不但流量减少,更有效地提升了拉取和刷新展示的速度。 

上面从业务环节讲述了优化的方法,这里从基础服务角度来描述优化手段:

四.网络优化

我们都知道主干互联网传输消耗的时间。主要包括三部分时间:DNS查找、TCP/TLS握手、数据传输。如何降低这三部分的耗时是网优的重要手段:

 1)IP直连:

实现方式是HTTP DNS。在启动完成后时发送一次HTTP请求获取一组手机淘宝中使用的域名IP映射表,并缓存在本地。每次发起连接时,直接在网络层使用IP代替域名直连。这种方式除了节省DNS时间,也可以规避掉公网DNS Server被攻击导致的手淘服务瘫痪,这种情况2013年曾经发生过一次,手淘未受任何影响。

 2)建立长连接:通过spdy实现, 减少TCP/TLS握手,降低建立连接成本。对于从CDN下载图片速度帮助很大。

 3) 域名收敛:收敛域名至公司的主力CDN域名。

尽量将请求集中在少数几个域名下,以提高长连接的复用率.

 4)TCP调优:

无线网络特点是丢包率高、RT长,针对此特点可以针对性的TCP调优。

实施的方案:

调大初始拥塞控制窗口、关闭空闲slow-start、动态MSS、关闭TCP DF、去掉TCP时间戳

 5)报文缩减:逐步由json协议格式向类PB协议转换。

 

五.图片方面优化

图片是电商app使用场景中最多的元素,如何快速节省流量的下载和渲染图片是电商app都非常关注的。除了上面网络优化提的长连接,域名收敛等几点之外,手淘还建立图片的分级机制。

按分辨率,质量,锐化,格式四个纬度,对同一张图片生成了不同组合的衍生文件。

设置了一系列匹配规则,针对不同屏幕,不同机型处理能力,不同网络环境,配置出合适当前情况的图片大小质量,保证图片大小既节省又保证用户视觉体验。

其中一个经验是当锐化程度高时,即使图片质量较低,图片色彩清晰度也都能让用户满意。

 

六.工欲善其事必先利其器

在整个手淘的启动优化过程中,系统的工具帮了我们很大的忙,Android的主要是自带的 TraceView工具,IOS 主要是Instruments自带的Time Profiler,System Trace等工具,它们都是数据采集和分析工具,主要用于分析应用程序中的hotspot,都非常强大。工具的具体使用方法不在本文论述范围内,但是这些工具都提供了程序中的所有线程使用状况,而且线程中的每一次的调用都可以看到具体的堆栈信息、耗时等详细信息。通过对这些调用的分析,就可以找到启动过程中相对耗时的调用。分析出具体的瓶颈点以后,就可以有针对性地进行具体优化了。

比如 手淘Android启动阶段以前有一个加密存储的模块,它会调用系统的SecretKeyFactory.getInstance()方法来生成加密的 key,我们是通过 TraceView 才发现这个函数调用会耗时300ms 以上,通过 TraceView看里面的调用堆栈发现它里面存在锁操作,所以比较耗时,找到这个瓶颈点之后,手淘Android调研了多种加密存储方式,最后换了一种比较轻量的加密存储模块,优化了该瓶颈点。

 

最后总结七大原则:

1.善用性能分析工具,建立监控体系

2.做好网络基础建设和网络调优

3.离线化,本地缓存

4.懒加载

5.任务分级,合理并行

6.在主线程移除多余操作

7.简化合并复杂视图

时间: 2025-01-20 23:33:21

手机淘宝性能优化的相关文章

手机淘宝性能优化全记录

该文章来自阿里巴巴技术协会(ATA)精选集  手机淘宝作为一个航母级的应用,承载了100多个业务方,部分是H5的形式接入,还有超过50个Native的业务方.为了规避安卓DEX65535的方法数限制以及各业务独立开发等需要,淘宝工程师门也是采用了多DEX(多Bundle)的开发形式,而且手淘作为一个以图片显示为重点的APP,在性能上不可避免的遇到了比较多的问题. 10月22日在北京新云南皇冠假日酒店召开的2015中国系统架构师大会上,手机淘宝技术专家王曜东(花名:雪鹭)为我们分享了<手机淘宝性能

手机淘宝无障碍优化,我们在路上!

该文章来自阿里巴巴技术协会(ATA) 你肯定知道,手淘正在改变我们的生活,已经从购物入口变成了移动生活的消费入口,我们每天变得越来越离不开他! 但是你未必知道,手淘也在改变着这样一群人的生活,他们用"耳朵"来购物,他们用"耳朵"来开店,手淘变成了他们的第三只眼,这群人就是全中国1700万视障人群的其中一部分: 关注视障人群,从手淘的无障碍优化开始,让我们来看看手淘无障碍工作历程:   让我们来看看无障碍常态化项目做了哪些事: 确定项目目标:无障碍体验工作加入到日常研

手机淘宝推荐中的排序学习

周梁:淘宝推荐机器学习技术专家,中国科学院自动化研究所机器学习博士,主要研究工作方向是机器学习.大规模并行算法优化.先后从事过广告CTR预估,MPI机器学习平台搭建,手淘个性化推荐等多方面工作. 排序学习是推荐.搜索.广告的核心问题.在手机淘宝的推荐场景中,受制于展示空间的限制,排序学习显得尤为重要.在淘宝,如何从十亿的商品中,挑选出用户 今天喜欢的商品,也是个巨大的挑战. 本次我们分享排序学习在手机淘宝中的应用,其中包括:解决了哪些问题,遇到了哪些挑战,以及做了哪些改进.   手淘推荐介绍  

阿里小蜜:语音识别、语义分析、深度学习在手机淘宝的实战分享

[编者按] 人工智能技术发展了近60年,道路起伏,成果丰硕.还记得2015年<谭铁牛院士:把握得当,人工智能是天使,魔鬼不会出现>的分析与展望.今年一场人机围棋大战,让人工智能彻底热了起来. 学术界,产业界,研究学者,篇篇精彩.业内都期待了解阿里的人工智能技术的实践.我们特别邀请阿里技术专家空无来深入分享下手机淘宝客户端是如何用语音识别.语义分析.深度学习等AI技术打造阿里小蜜客服系统的. 下为正文:   一场人机大战,让全世界所有对人工智能一知半解的人们变成了人类未来的担忧者.段子手. &q

OneSDK与手机淘宝技术能力开放

该文章来自阿里巴巴技术协会(ATA)精选集  7月16日,阿里巴巴集团在杭州召开阿里百川无线开放大会,来自阿里巴巴的技术专家向与会观众介绍了百川无线开放背后的技术细节. 阿里百川阿里巴巴集团无线开放平台,为移动开发者(涵盖移动创业者)提供快速搭建APP.加速APP商业化.提升用户体验的解决方案.在阿里百川无线开放大会的技术专场,阿里技术专家分享了关于TAE 2.0.OpenIM.移动安全等方面的技术细节,InfoQ之前已对TAE和OpenIM的技术负责人做过采访,今天就让我们来了解一下阿里百川无

当手机淘宝遇见海尔电商

该文章来自阿里巴巴技术协会(ATA)精选集  7月的青岛,向来是旅游胜地.手机淘宝技术团队收到海尔的邀请,展开了一场别开生面的技术之旅,阿里无线事业部(手机淘宝)资深总监南天也应邀在[海尔电商技术沙龙]并发表演讲<移动研发架构与优化实践>. 随着用户向移动端转移,移动电商成为当前移动互联网营销的一大热点,而"移动电商如何发力"成为了当前移动电商关注的热点话题.作为移动电商巨头的手机淘宝在沙龙上备受关注. 南天的演讲从宏观面入手,用数据说话,一目了然的向大家展示了阿里在移动电

明星讲师心石闪耀ArchSummit大会 | 手机淘宝构架演化实践

该文章来自阿里巴巴技术协会(ATA)精选集  2014年12月19日~20日,ArchSummit北京2014大会上"移动互联网,随时随地"专题火爆非凡.阿里无线事业部技术负责人庄卓然(花名南天)任移动专题出品人.   阿里无线事业部的高级专家李敏(花名心石,微博:@allblue_华丽地低调 )分享了<手机淘宝架构演化实践>,演讲深受好评,荣获明星讲师.     手淘技术研发团队派出的交流学习小分队也在ArchSummit大会现场和行业里的工程师们愉快的交流学习和玩耍 .

手机淘宝移动端接入网关基础架构演进之路

移动网络优化是超级App永恒的话题,对于无线电商来说更为重要,网络请求体验跟用户的购买行为息息相关,手机淘宝从过去的HTTP API网关,到2014年升级支持SPDY,2015年双十一自研高性能.全双工.安全的ACCS(阿里云通道服务)扛住双十一战场主要流量,无论是基础架构的演进.网络调优.协议的优化.异地多活.网络调度上都有不少宝贵的经验与大家分享. ACCS基于无线场景精心设计的双工 .安全.低时延.开放的移动统一接入层服务,在双十一当天稳定高效地服务了近2亿的在线用户,支持了峰值4500万

做淘宝SEO优化时的十大雷区

摘要: 大家牢记一点,宝贝搜索降权的,都会在这个搜索诊断助手的宝贝诊断里面看到.除此之外,不要天天用各种软件去检测宝贝隐性降权什么的,淘宝官方已经声明,从来没有隐形降权的 大家牢记一点,宝贝搜索降权的,都会在这个"搜索诊断助手"的"宝贝诊断"里面看到.除此之外,不要天天用各种软件去检测宝贝隐性降权什么的,淘宝官方已经声明,从来没有隐形降权的事情.下面我们会把十大违规情况简单地说一下. 搜索优化十大违规,淘宝搜索帮派官方网站已经说得很详细了,这个大家在做淘宝SEO优化