技术文章

腾讯网手机版本优化

业务名称:腾讯网手机版本
业务地址:http://xw.qq.com

背景:项目起动快,前期基本上以面向过程的方式开发,主要使用smarty,接口API的方式实现功能。随项目进行,问题也出现。用smarty时,首次访问速度太慢。技术架构不适合后期需求扩展。第一次优化调整从两方面入手,技术构架和页面的静态化。
调整后结构如下:

技术构架优化:从单一入口扩展成三个版本iphone/simple/senoir  外加一个对外服务service 。三个版本APP结构类似。这样就满足大多数无线手机设备。iphone 普通版本,适合android,IOS 等等,simple适合Symbian等低端机型,senoir高端版本只适合iphone IOS用户, 一些定制化内容。并且三个版本可分布式部署,通用类库为 Libs。
页面优化:首页与频道首页全面静态化,由服务器crontab定时更新页面,容错处理,接口API有问题时,页面保留最近一次更新时的数据。(这个地方后来真的起很大作用,API出问题时至少首页都是好用的)
路由规则优化:由原来单一入口优化成根据业务需求访问定位不同处理逻辑,类似工厂模式

这次优化大大降低耦合度,解决了新需求的扩展与首页页面访问速度问题(基本小于500MS),基本是新的需求能很快响应。尔后使用smarty缓存的问题显示出现了,缓存文件太大占满磁盘导致WEB服务器死掉。
第二次优化缓存与文章页面,不再使用smarty自有缓存,重新设计缓存逻辑,基本思路是使用静态文件缓存,根据时间来更新缓存。动态判断磁盘空间删除缓存,让每个访问用户成为清理缓存的触发者。
设计核心代码:
创建缓存:

删除缓存:此个是访问用户触发。

读取缓存是根据文件修改时间,过期则重新写缓存。其他优化细节把不需要加载smarty库文件地方去掉,按需加载。优化效果如下:

本地速度提高近三倍
线上测试也近提高三倍

提高速度的原因总结为:使用新缓存方式,文件按需要加载和其他比如调整判断缓存代码等。

项目今年进行首页改版后发现个问题,首页二级栏目过多,加载耗时,静态化首页逻辑需要再重新设计。优化点,首页也要按需加载,用户往下滑动时再加载,数据用内存cache,节省API时间,后续补充完善……

Leave a Reply

Free Web Hosting