Penjelasan terperinci tentang ujian prestasi dan teknik pengoptimuman dalam rangka kerja Gin

WBOY
Lepaskan: 2023-06-23 09:15:49
asal
2626 orang telah melayarinya

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

  1. Alat ujian tekanan

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
Salin selepas log masuk

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
Salin selepas log masuk
  1. Proses ujian

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()
}
Salin selepas log masuk

Gunakan pelayan baris perintah apache alat untuk menguji 500 permintaan serentak:

$ ab -c 500 -n 500 http://localhost:8080/
Salin selepas log masuk

Gunakan alat baris perintah wrk untuk menguji 500 permintaan serentak:

$ wrk -c 500 -t 500 -d 10s http://localhost:8080/
Salin selepas log masuk

II , Kemahiran pengoptimuman rangka kerja Gin

  1. Gunakan GOMAXPROCS

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)
Salin selepas log masuk

numCPUs menunjukkan bilangan penjadual yang akan ditetapkan disyorkan supaya tidak melebihi bilangan teras CPU pada mesin Jika tidak, ia akan menjejaskan prestasi program.

  1. Kurangkan peruntukan memori

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)
 // ...
}
Salin selepas log masuk

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.

  1. Kurangkan penciptaan objek

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:

  • Gunakan pengumpulan objek struktur, yang boleh dicapai dengan menyimpan objek dalam kepingan:
// 定义结构体类型
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)
 // ...
}
Salin selepas log masuk

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.

  • Jangan cipta objek dalam gelung. Mencipta objek di dalam gelung boleh mengakibatkan peruntukan memori yang ketara dan pengumpulan sampah, jadi adalah disyorkan untuk mencipta semua objek yang mungkin diperlukan di luar gelung.
  1. Log keluaran ke fail

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)
Salin selepas log masuk

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.

  1. Caching fail statik

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)))
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!