高质量编程与性能调优实战
高质量编程
一、什么是高质量编程
高质量编程是编写代码能够达到正确可靠、简洁清晰的目标,并且考虑完备各种边界条件、异常情况处理、稳定性保证、易读易维护。
二、常见编码规范
- 代码格式
Go语言可以使用 gofmt 规则来格式化代码,也可以借助工具来优化代码。比如使用 goimports 工具进行包导入管理,可以自动导入包,去除不适用的包,并按字典序排列。
package main
import (
"fmt"
)
func SetUser(user User) {
fmt.Println("user:", user)
}
- 注释
注释需解释代码的具体作用 注释应该提供代码未表达出的上下文信息
/**
对函数、结构体等最好用多行注释,才能在调用函数时给于提示
*/
func main() {
//在函数内部用单行注释
}
- 命名规范
命名采用驼峰式命名规则,不包含大写字母和下划线等字符 核心目标是降低阅读理解代码的成本 重点考虑上下文信息,设计简洁清晰的名称 最好能直接表明具体作用
//正确方式
func SetUser(user User) {
//...
}
//错误方式
func set_user(user User) {
//...
}
- 控制流程
避免嵌套,保持正常流程清晰 如果两个分支中都包含 return 语句,则可以去除冗余的 else 尽量保持正常代码路径为最小缩进,优先处理错误情况/特殊情况,并尽早返回或继续循环来减少嵌套,增加可读性 提升代码可维护性和可读性
//正确方式
func main(age int) (string) {
if age > 20 {
return "大于20";
}
return "小于或等于20";
}
- 错误和异常处理
error 尽可能提供简明的上下文信息链,方便定位问题 panic 用于真正异常的情况 recover 生效范围,在当前 goroutine 的被 defer 函数中生效
性能调优实战
一、什么是性能调优
性能调优是为了让程序达到较佳的性能状态,用于处理系统响应速度太慢等情况。
性能调优方法包括:
- 减少系统资源的使用。
- 减少系统内存的使用。
- 优化算法和数据结构。
- 使用多线程。
- 减少网络访问。
- 缓存数据。
二、性能调优原则
性能调优的原则:
- 要依靠数据不是猜测
- 要优先查最大的性能瓶颈。
- 要确诊性能问题的根因。
- 要考虑各种情况。
反面原则:
- 不要做过度的、反常的优化。
- 不要过早做不成熟的优化。
- 不要做表面的肤浅优化。
三、性能分析工具
性能调优的核心是性能瓶颈的分析,对于 Go 应用程序,最方便的就是 pprof 工具。
pprof 功能说明
- pprof 是用于可视化和分析性能分析数据的工具
- 可以知道应用在什么地方耗费了多少 CPU、memory 等运行指标
pprof 实践
- 排查 CPU 占用过高
//通过 top 命令,查看 CPU 占用较高的调用
//使用该命令来采样 CPU 占用情况的信息
go tool pprof "http://localhost:6060/debug/pprof/profile"
//使用list Eat,查看问题具体在代码的哪一个位置
//熟悉 web 页面分析
//调用关系图,火焰图
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/cpu"
- 排查堆内存问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"
- 排查协程问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"
- 排查锁问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"
- 排查阻塞问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"
四、性能调优案例
图片调优
在项目中图片是很占用带宽和加载时长的,尤其对于电商平台的商品列表和详情页来说图片数量众多,所以必须做一些优化处理。
优化方法:
- 选择合适的图片格式:不同的图片格式有不同的特点和适用场景。例如,JPEG适合高质量的图片,PNG适合需要透明背景的图片,而GIF适合小图标和动画。
- 压缩图片:压缩可以减小图片的文件大小,从而加快加载速度。可以使用工具(如TinyPNG)或服务(如Cloudinary)进行图片压缩。
- 调整图片尺寸:根据实际需求调整图片的尺寸。如果图片尺寸过大,会增加加载时间;如果图片尺寸过小,会影响图片的清晰度。可以使用图像编辑工具(如Photoshop)或在线工具(如Canva)进行调整。
- 使用适当的分辨率:在保证图片质量的前提下,尽可能使用较低的分辨率。过高的分辨率会增加文件大小,从而影响加载速度。
- 懒加载图片:懒加载是一种延迟加载图片的技术,只有当图片进入视口时才会加载。这可以减少不必要的加载,加快页面加载速度。
前端资源调优
在打开我们的网页时,如果存在加载速度慢,可以采用以下优化方案进行调优。
优化方法:
- 压缩JavaScript和CSS文件:通过去除空格、注释和不必要的字符,可以减小文件大小,提高加载速度。
- 使用CDN加速:CDN(内容分发网络)可以更快地加载静态资源,如JavaScript、CSS和图片。
- 图片优化:压缩图片大小,使用适当的格式,以及懒加载图片都可以提高网站性能。
- 使用缓存:通过设置缓存头,可以减少请求次数,提高加载速度。
- 优化DOM结构:减少DOM元素数量,避免复杂的DOM结构,可以提高页面加载速度和渲染性能。
- 使用延迟加载:对于不紧急的资源,可以使用延迟加载技术,以减少首屏加载时间。
- 优化CSS样式:避免使用过多的CSS样式,减少不必要的样式和选择器,可以提高页面加载速度和渲染性能。
数据请求调优
在项目中数据请求时间较长,会导致用户等待时间增加,从而降低了用户体验。尤其是社交网络应用,需要实时接收消息,会涉及到大量数据请求。
优化方法:
- 减少请求次数:尽可能减少网页上的数据请求次数,一方面可以减少服务器压力,另一方面可以加快网页加载速度。
- 使用异步加载:对于不是网页加载过程中必须立即展示的数据,可以使用异步加载的方式进行请求。
- 数据压缩:在数据传输过程中,可以使用压缩算法对数据进行压缩,减小数据的传输量,从而提高数据加载速度。
- 数据缓存:对于一些经常使用的数据,可以使用缓存机制,将数据存储在本地或缓存服务器中,减少对服务器的请求次数。
总结
性能调优是一项改进软件性能的工程,它涉及到软件代码、数据库、网络等方面的优化。通过优化,可以提高软件的响应速度和处理能力,提高系统的整体性能。
在进行性能调优时,需要遵循一些原则,如优先查找最大的性能瓶颈、确诊性能问题的根因、考虑各种情况等。同时,也要避免一些常见的错误做法,如过度优化、过早优化、表面优化等。
性能调优的方法包括多种,如优化算法和数据结构、使用多线程、减少系统资源的使用、减少内存的使用、优化网络访问、缓存数据等。
总之,性能调优是一项需要深入了解系统和代码的工程任务,需要综合考虑多方面的因素,才能达到最佳的优化效果。