UPYUN薛嘉懂:轻应用的速度优化

浏览:
字体:
发布时间:2015-03-24 09:30:08
来源:

“成名要趁早”是我们在 App 上线后最大的期待。而大量应用面临用户百千万级增长的喜悦时刻,却会因为架构和数据优化的不足,在打开应用的时候图片加载极度缓慢,出现卡顿甚至闪退的情况,导致用户体验的急剧下降。

众所周知,应用是否受欢迎由两点决定一是创意构成,二是用户体验。所以,反应速度缓慢导致的体验剧降是致命的。那么如何解决这个问题?一个非常好的途径,是从网络稳定性、资源内容大小、网络请求链接速度和源站带宽资源着手,将移动应用做到轻便、流畅和体验上乘。

将一款应用内容进行分类,就不难发现,其中超过 90% 的内容都属于静态资源(如图片、音视频、样式等)。如何将内容进行有效加速,是非常棘手的一个问题。当我们谈到“轻应用下的内容和速度优化”的时候,其实我们是在谈开发和运营的心得:

图片的优化主要体现在格式、质量压缩和终端适配等三个方面:格式上,在不影响浏览的前提下,webp 的体积优势强于 jpg 强于 png,bgp 虽然标准化不足但压缩率却非常高;质量压缩上,根据以往经验 jpg 的理想压缩率在75,在有限体积下最大程度保证图片质量;终端适配上,UPYUN 支持移动端适配,灵活使用缩略图匹配不同的设备尺寸所需。

而音视频的内容调整建议,主要体现在根据业务需求,调整转码、分辨率的合适参数。

网络传输方面。相较于标准的 HTTP 协议而言,SPDY是一种增强型的协议,能够以最小化网络延迟提升网络速度。而 HTTP/2 是在 SPDY 的基础上发展起来的,是未来的流行趋势。UPYUN 正在计划开源一个网络优化的项目,不日后将对外发布,将进一步优化网络传输的效率。

当应用开发完成之后,真正的用户体验才浮出水面。

以场景为例,当我们在 App 上看到一张图片,也许仅需几十毫秒的时间,但它可能已途径大半个中国。经历了“DNS 解析目标地址”- “寻找服务器源站”- “URL 对应的图片”-“原路返回资源”-“App 上显示”整个流程。

在这个不可见的流程中,每个环节仍隐藏着一些不稳定因素:

首先是用户所处的终端网络,当用户使用不稳定的移动网络时,数据访问的效果就会非常糟糕。而从技术层面来说,建议通过 HTTP 长连接以及断点上传下载的方式进行优化和改善;

其次是用户与资源之间的距离,跨省的速度就会大打折扣。在长距离的资源获取上,简单粗暴的办法是在不同省份,都购买数据服务器,这样既能起到就近访问的效果,还能实现内容分流和负载均衡,当然,代价也是巨大的;

第三是极具中国特色的线路问题。如果你的服务器使用的是电信线路,而用户通过联通或者移动网络来访问,由于是跨运营商线路,访问的速度就极度缓慢。最直接的解决方式,就是购买多条线路或者 BGP,确保不同网络的用户访问时,都能走相同的网络获取到资源。

最后是源站带宽,当请求曲折到达源站服务器,如果源站只是一根小水管,那么提速就显得力不从心。这种情况下,最直接的方法就是购买更多的带宽。

通过对上述几个情况的分析,也许可以得出一个比较常用的解放方案,那就是“买买买”。

除了高额的自行购买和搭建之外, CDN 服务是成熟的技术开发人员更为乐意选择的解决方式——通过合理使用分布在全国各地的加速节点,让终端用户从最近的节点获取资源,从而避免每次请求都从源站获取。

对应到此前提出的几种场景,CDN 都能很好的解决。针对移动网络不稳定的问题,CDN 完成了长连接的优化,并实现了断点上传下载。针对小水管的服务器带宽,则可以通过多级缓存的机制,尽量减少回源请求,从而提升并发处理能力。可以这么理解,CDN 就是把全国的加速节点和网络资源,都共享给所有用户使用,用户分分钟就能拥有上百给机房以及上千台服务器。

以 UPYUN CDN 实时性能监控为例,UPYUN 平台每天的请求量超过 300 亿次,折算下来每分钟的处理量约为 2000 多万。通过对平台上真实数据的实时统计,用户就能直观了解到当前 CDN 网络的服务质量和加速效果,精准的显示资源健康度、缓存命中率、下载速度、耗时,请求占比等数据,也能分析各个运营商线路和区域的信息,方便大家及时跟踪。

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();