Rumah >pembangunan bahagian belakang >Golang >Penjelasan terperinci tentang ujian prestasi dan teknik pengoptimuman dalam rangka kerja Gin
Rangka kerja Gin ialah rangka kerja web yang ringan berdasarkan bahasa Go Ia cekap, pantas dan mudah digunakan serta telah digunakan secara meluas dalam banyak bidang. Walau bagaimanapun, dalam pembangunan perniagaan harian, ujian prestasi dan teknik pengoptimuman untuk rangka kerja Gin bukanlah mudah Artikel ini akan memperkenalkannya kepada anda secara terperinci.
1. Ujian prestasi rangka kerja Gin
Sebelum menjalankan ujian prestasi, anda perlu terlebih dahulu menyediakan alatan ujian yang sepadan, di sini Dua alat ujian tekanan yang biasa digunakan disyorkan: ApacheBench dan wrk.
ApacheBench ialah alat ujian prestasi HTTP ringkas yang dilancarkan oleh Yayasan Perisian Apache Ia sangat mudah dan mudah digunakan serta boleh menguji prestasi satu permintaan atau permintaan serentak. Ia boleh dipasang menggunakan arahan berikut:
sudo apt-get update sudo apt-get install apache2-utils
wrk ialah alat ujian prestasi HTTP yang cekap yang menyokong permintaan HTTP tersuai dan boleh digunakan untuk menguji kependaman prestasi dan tindak balas permintaan serentak. Anda boleh menggunakan arahan berikut untuk memasang:
sudo apt-get update sudo apt-get install wrk
Sebelum melakukan ujian prestasi, adalah disyorkan untuk memahami aliran kerja asas dan struktur kod rangka kerja Gin , yang akan membantu Untuk lebih memahami dan menganalisis keputusan ujian. Uji struktur kod, kualiti kod dan kawalan proses rangka kerja Gin.
Apabila melakukan ujian prestasi, anda perlu menentukan laluan mudah dahulu dan kemudian melakukan ujian tekanan pada laluan tersebut. Berikut ialah contoh mudah:
import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello, World!") }) r.Run() }
Gunakan pelayan baris perintah apache alat untuk menguji 500 permintaan serentak:
$ ab -c 500 -n 500 http://localhost:8080/
Gunakan alat baris perintah wrk untuk menguji 500 permintaan serentak:
$ wrk -c 500 -t 500 -d 10s http://localhost:8080/
II , Kemahiran pengoptimuman rangka kerja Gin
GOMAXPROCS mewakili bilangan maksimum penjadual untuk program Go, yang akan menjejaskan prestasi serentak program tersebut. Secara lalai, nilai GOMAXPROCS adalah sama dengan bilangan teras CPU pada mesin, yang boleh ditetapkan dengan menggunakan pernyataan berikut dalam program:
runtime.GOMAXPROCS(numCPUs)
numCPUs menunjukkan bilangan penjadual yang akan ditetapkan disyorkan supaya tidak melebihi bilangan teras CPU pada mesin Jika tidak, ia akan menjejaskan prestasi program.
Peruntukan memori merupakan isu penting dalam bahasa Go kerana ia boleh membawa kepada "pengumpulan sampah (GC)", dan GC boleh melambatkan program prestasi. Oleh itu, mengurangkan peruntukan memori dalam rangka kerja Gin adalah salah satu kunci untuk mengoptimumkan prestasi.
Teknik peruntukan memori klasik ialah menggunakan penyegerakan.Kolam, yang boleh mengelak daripada memperuntukkan terlalu banyak memori pada timbunan pada tahap tertentu. Berikut ialah contoh:
var bufPool = sync.Pool{ New: func() interface{} { return new(bytes.Buffer) }, } func handler(w http.ResponseWriter, r *http.Request) { buf := bufPool.Get().(*bytes.Buffer) buf.Reset() defer bufPool.Put(buf) // ... }
Sebelum melaksanakan fungsi pengendali, sync.Pool akan menyemak sama ada terdapat penimbal yang tersedia dan jika ya, gunakannya terus, jika tidak ia akan mencipta penimbal baharu. Selepas fungsi menyelesaikan pelaksanaan, penimbal dikosongkan dan dimasukkan semula ke dalam kolam penimbal.
Dalam kerangka Gin, penciptaan objek juga merupakan salah satu sebab yang boleh menyebabkan pengumpulan sampah. Oleh itu, mengurangkan penciptaan objek juga sangat penting untuk prestasi program anda. Berikut ialah beberapa cara biasa untuk mengurangkan penciptaan objek:
// 定义结构体类型 type Request struct { // ... } // 初始化切片 var requestsPool = make(chan *Request, 1000) func getRequest() *Request { select { case r := <-requestsPool: return r default: return new(Request) } } func putRequest(req *Request) { select { case requestsPool <- req: default: } } // 使用请求对象 func handler(w http.ResponseWriter, r *http.Request) { req := getRequest() defer putRequest(req) // ... }
Sedang dilaksanakan Sebelum pengendali fungsi, fungsi akan memperoleh objek Permintaan yang tersedia daripada kepingan Jika tiada objek yang tersedia, objek baharu akan dibuat. Selepas fungsi dilaksanakan, objek Permintaan akan dikosongkan dan dimasukkan semula ke dalam kepingan.
Semasa pembangunan harian, maklumat log biasanya dikeluarkan dalam konsol, tetapi ini mungkin menjejaskan prestasi program . Oleh itu, adalah disyorkan untuk mengeluarkan log ke fail, yang boleh dicapai dengan pernyataan berikut:
f, _ := os.Create("/var/log/gin.log") gin.DefaultWriter = io.MultiWriter(f)
Pernyataan di atas akan mengeluarkan log ke fail /var/log/gin.log dan mengeluarkannya ke konsol dan fail. Ini memastikan bahawa program hanya perlu mengakses fail sekali apabila mengeluarkan maklumat log, dan mengurangkan penggunaan prestasi program apabila mengakses konsol.
Dalam rangka kerja Gin, anda boleh menggunakan perisian tengah fail statik untuk cache statik CSS, JS, imej dan fail lain, yang boleh meningkatkan prestasi dengan ketara Prestasi program kerana ia mengelakkan memuat semula fail statik pada setiap permintaan.
Berikut ialah contoh:
r.Use(static.Serve("/", static.LocalFile("/var/www/html", true)))
Pernyataan di atas menyimpan cache semua fail statik dalam direktori /var/www/html secara setempat dan memuatkannya secara automatik pada setiap permintaan. Ini boleh mengurangkan trafik rangkaian dan beban pelayan dengan berkesan.
Ringkasan
Sebagai rangka kerja Web yang cekap, pantas dan mudah digunakan, rangka kerja Gin digunakan secara meluas dalam pembangunan harian. Walau bagaimanapun, ujian prestasi dan teknik pengoptimuman untuk rangka kerja Gin bukanlah mudah, dan anda perlu memahami prinsip dan aliran kerjanya dengan teliti. Artikel ini memperkenalkan ujian prestasi dan teknik pengoptimuman rangka kerja Gin secara terperinci, dengan harapan dapat membantu pembangun menggunakan rangka kerja Gin dengan lebih baik, mengoptimumkan prestasi program dan meningkatkan pengalaman pengguna.
Atas ialah kandungan terperinci Penjelasan terperinci tentang ujian prestasi dan teknik pengoptimuman dalam rangka kerja Gin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!