一、前端优化
1.页面初始资源的加载
通过YSLOW+PageSpeed来进行前端性能检测,根据其给出的意见做出对应的调整。由于产品中前端页面都比较简单,目前这部分内容的评分基本符合要求。
2.JS脚本执行效率
考虑到我们的产品大多为客户端内嵌网页,很多数据是从客户端异步获取的,JS脚本也会受到这些数据请求时间的影响,且内嵌客户端网页不能通过Firebug之类的工具进行断点调试,目前的思路主要是自己写小工具,在JS代码中埋点,最后输出每个功能的执行时间,以此来定位性能问题触发点。
二、后端优化
1.数据库优化
主要体现在数据库的查询操作上面,部分查询很慢。
发现:SQL测试
解决:优化SQL语句或者采用高效的数据库操作工具或者进行读写分离
2.程序流程上的优化
随着需求的增加和调整,存在代码累积的问题,有时候会导致一个简单的业务中出现重复的流程。
发现:CodeReview
解决:代码重构
3.程序架构上的优化
一方面是随着项目的发展,用户量的增加,初期的程序设计不能满足现有的需求;另一方面是为了解决问题,在项目中使用了其他的框架技术,导致后期比较杂乱,难以部署维护。
发现:项目总结
解决:更改程序设计方案,精简外界依赖。
4.算法上的优化
主要针对计算比重较大的项目,目前很少涉及。
发现:CodeReview
解决:代码重构
5.代码规范上的优化
循环嵌套过深、流程语句过长也会导致性能下降。
发现:PHPMD的邮件通知、CodeReview
解决:代码重构
优化中遇到的几个问题
1.定位:如何找到瓶颈点?
1)通过工具测试性能
比如YSLOW、JMeter、自己编写的小工具等
2)通过反馈获取数据
日志分析、用户留言等
3)代码评审
2.如何保证优化过程中不影响新功能的开发,并且优化后可以快速上线?
1)将需要优化的内容分解,每次优化一个功能,并做好单元测试
2)利用SVN的分支功能,在branch分支上进行优化工作,在trunk主干上进行线上项目的维护
3)正式服务器上用虚拟机额外部署一份程序,便于出现线上问题时,能够快速重现解决
3.如何避免下一次出现相同的问题?
1)自动化检测工具
2)构建并维护性能规范库,类似雅虎的23条规范
4.如何测试客户端内嵌网页的前端性能?
伪造数据做一个页面,由于只测试前端性能,所以这样通过YSLOW测得的数据仍有参考价值。
5.外部接口如何测试?
单元测试
6.对于一些难以快速优化的情况,如何改善?
通过交互上的优化来弥补性能上的不足。比如请求数据耗时很长,那么可以通过一个遮罩层加Loading图标的方式,来改善用户体验。
经过初期的数据搜集和测试,从目前的问题来看,影响性能最大的因素,在于服务端的数据库操作和客户端的JS脚本。后续会针对这两块做进一步的学习。