高质量编程与性能调优实战 | 青训营

91 阅读7分钟

高质量编程与性能调优实战

高质量编程

一、什么是高质量编程

高质量编程是编写代码能够达到正确可靠、简洁清晰的目标,并且考虑完备各种边界条件、异常情况处理、稳定性保证、易读易维护。

二、常见编码规范

  • 代码格式

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.jpg

pprof 实践

  1. 排查 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"
  1. 排查堆内存问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"
  1. 排查协程问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"
  1. 排查锁问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"
  1. 排查阻塞问题
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"

四、性能调优案例

图片调优

在项目中图片是很占用带宽和加载时长的,尤其对于电商平台的商品列表和详情页来说图片数量众多,所以必须做一些优化处理。

优化方法

  1. 选择合适的图片格式:不同的图片格式有不同的特点和适用场景。例如,JPEG适合高质量的图片,PNG适合需要透明背景的图片,而GIF适合小图标和动画。
  2. 压缩图片:压缩可以减小图片的文件大小,从而加快加载速度。可以使用工具(如TinyPNG)或服务(如Cloudinary)进行图片压缩。
  3. 调整图片尺寸:根据实际需求调整图片的尺寸。如果图片尺寸过大,会增加加载时间;如果图片尺寸过小,会影响图片的清晰度。可以使用图像编辑工具(如Photoshop)或在线工具(如Canva)进行调整。
  4. 使用适当的分辨率:在保证图片质量的前提下,尽可能使用较低的分辨率。过高的分辨率会增加文件大小,从而影响加载速度。
  5. 懒加载图片:懒加载是一种延迟加载图片的技术,只有当图片进入视口时才会加载。这可以减少不必要的加载,加快页面加载速度。

前端资源调优

在打开我们的网页时,如果存在加载速度慢,可以采用以下优化方案进行调优。

优化方法

  1. 压缩JavaScript和CSS文件:通过去除空格、注释和不必要的字符,可以减小文件大小,提高加载速度。
  2. 使用CDN加速:CDN(内容分发网络)可以更快地加载静态资源,如JavaScript、CSS和图片。
  3. 图片优化:压缩图片大小,使用适当的格式,以及懒加载图片都可以提高网站性能。
  4. 使用缓存:通过设置缓存头,可以减少请求次数,提高加载速度。
  5. 优化DOM结构:减少DOM元素数量,避免复杂的DOM结构,可以提高页面加载速度和渲染性能。
  6. 使用延迟加载:对于不紧急的资源,可以使用延迟加载技术,以减少首屏加载时间。
  7. 优化CSS样式:避免使用过多的CSS样式,减少不必要的样式和选择器,可以提高页面加载速度和渲染性能。

数据请求调优

在项目中数据请求时间较长,会导致用户等待时间增加,从而降低了用户体验。尤其是社交网络应用,需要实时接收消息,会涉及到大量数据请求。

优化方法

  1. 减少请求次数:尽可能减少网页上的数据请求次数,一方面可以减少服务器压力,另一方面可以加快网页加载速度。
  2. 使用异步加载:对于不是网页加载过程中必须立即展示的数据,可以使用异步加载的方式进行请求。
  3. 数据压缩:在数据传输过程中,可以使用压缩算法对数据进行压缩,减小数据的传输量,从而提高数据加载速度。
  4. 数据缓存:对于一些经常使用的数据,可以使用缓存机制,将数据存储在本地或缓存服务器中,减少对服务器的请求次数。

总结

性能调优是一项改进软件性能的工程,它涉及到软件代码、数据库、网络等方面的优化。通过优化,可以提高软件的响应速度和处理能力,提高系统的整体性能。

在进行性能调优时,需要遵循一些原则,如优先查找最大的性能瓶颈、确诊性能问题的根因、考虑各种情况等。同时,也要避免一些常见的错误做法,如过度优化、过早优化、表面优化等。

性能调优的方法包括多种,如优化算法和数据结构、使用多线程、减少系统资源的使用、减少内存的使用、优化网络访问、缓存数据等。

总之,性能调优是一项需要深入了解系统和代码的工程任务,需要综合考虑多方面的因素,才能达到最佳的优化效果。