美联客户端无线网关实践
网关的第一个优化的问题:
由于https(需要5次握手)比http(需要3次握手)多了两次握手(建立ssl隧道),所以在弱网环境下,https建立失败的几率会比http请求多很多。怎么具有https的安全性,又具有http的快速性就是无线网管需要解决的问题。
解决方案:
应用启动建立https的ssl隧道,需要证书认证,并保存会话信息到内存中。当认证成功后,ssl隧道断开(它一般是长连接,由于网络原因或超过它的时间,也会断开),再发送https请求都携带会话信息,当网关收到这样的https请求并且核对会话信息正确,不再进行证书认证直接建立通道(采用和http相似的方式建立通道)。
简言之:应用运行期间,首次https请求需要证书认证,以后不需要证书认证。
网关优化的第二个问题:
当一个页面加载时需要发送多个请求才能完成。通常的解决方案有三个:
1. 客户端多次或依次发送多个https请求(会出现加载页面耗时较长,处理逻辑复杂—部分成功部分失败,app弹出小菊花不当问题)。包括使用RACSignal的merge方法来使多个请求都收到响应后才触发页面刷新。
2. 服务器把多个不相关接口合并成一个接口。
解决方案:
对每个https请求进行编号,抽象出聚合层。客户端发送的一个超级请求包括https请求编号列表,请求参数列表。聚合层解析这个请求,向服务端发起多次请求,当收到所有请求后再给客户端这个组合结果。
由于客户端和网关间时外部网络,网络存在延迟和不稳定。网关和后台服务间是再一个局域网内,网络很稳定,无网络延迟。这样能大幅度提高客户端请求的响应速度和客户端处理的复杂度,服务端也免去了设计各种不相关的请求合并接口。
简言之:聚合层。
pp下载地址:https://pan.baidu.com/s/1bpvOlSb
蘑菇街App启动性能优化实践
对应用启动时的数据加载和文件读写进行分类,区分为启动时必须同步加载的数据(这类数据一般要尽量少)和异步加载的数据(本地化数据读取,这样数据可能比较大。一般的数据都可以用这种方式。这种方式又叫懒加载)。尽快的让用户从点击app图标,到看到欢迎页面。
异步加载的数据数据,通过起线程来加载数据和读写文件。为了防止在读本地数据时,用户使用正读写的数据,可以通过单例变量进行标识和防范(相当于加锁和解锁。系统锁其实也需要时间来生效的,并非你上了锁,它无延迟的生效,但是单例变量就可以做到实时生效)。
既然是用起线程的方式加载大数据,就存在非后台运行的app(如:开启后台持续定位的app,在后台仍可以正常运行),用户在加载数据的时间突然按home键,苹果系统有可能永远挂起这个线程,让你无法再继续加载数据。
所以最后对懒加载的数据部分抽象出来一个类,能够识别数据加载过程中禁止读写,数据加载被永远阻塞重新加载,数据加载失败。
viewWillAppear函数并非在页面加载前的处理,而是页面出现时的时机时在刚显示还不能交互时调用该函数,并非页面显示显示之间调用该函数,viewDidAppear函数是页面出现时机是可以刚可以交互时的处理函数。你在这两个函数里设置一个断点调试时就可以发现它的不同。所以欢迎页最好放在viewWillAppear数据里。
简言之:起线程进行懒加载。
pp下载地址:https://pan.baidu.com/s/1boHmCwf
无线配置中心演进历程
对每个功能进行标号,通过正则表达式进行配置中心数据编号的命中处理。
服务器下发配置中心数据更新消息,客户端解析消息,根据解析的消息结果来决定是否向服务器下载数据(配置数据,hotfix数据等)
简言之:通过配置中心管理需要加载的应用模块。
ppt下载地址:https://pan.baidu.com/s/1o8iA9DK
不过分享会的内容要比ppt中的内容多的多,ppt只是概念性的东东。
我的csdn的上传资源空间满了,只能使用百度云盘了。
蘑菇街分享中心地址:
http://mday.mogu.io/?from=timeline&isappinstalled=0#t1.1(这个网址今天进入不进去,不知道什么原因。原来的是可以了。)