性能优化小结
性能优化小结
今年上半年公司的产品开发侧重点从开发新产品转向了性能优化和运营,因此需要我们针对性能优化这一块,制定一些计划。二月份已经进行了一些初步的实践,这里做一个小结,便于今后参考。
一、前端优化
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 脚本。后续会针对这两块做进一步的学习。
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息