Baru-baru ini saya mula mengusahakan agregator pertukaran mata wang kripto. Pada asasnya saya menghantar permintaan kepada sekumpulan pertukaran yang berbeza dan membandingkan kadar. Ini perlu dibuat secepat mungkin. Dalam siaran ini, saya akan menunjukkan beberapa tweak yang saya buat untuk meningkatkan prestasi saya dengan ketara.
Namun perlu diingat bahawa saya bukan pakar (terutamanya dalam perjalanan) dan saya hanya berkongsi penemuan saya daripada projek peribadi saya sendiri.
Peningkatan ini datang dalam urutan peningkatan terbesar masa jalan.
Dalam mana-mana program Go, goroutine adalah penting untuk kelajuan. Rangsangan terbesar yang saya buat adalah dengan menghantar permintaan secara serentak. Memandangkan saya perlu mendapatkan 12 pertukaran yang berbeza, menghantar permintaan ini pada masa yang sama mengurangkan masa jalan saya daripada sekitar 24 saat kepada hanya ~3.
Gorutin sangat mengagumkan dan sangat mudah digunakan. Anda harus memasukkannya di mana mungkin. Tetapi sentiasa berhati-hati dengan Data Races
Saya menukar pengekodan/json untuk github.com/json-iterator/go.jsoniter ialah perpustakaan pemprosesan JSON pantas yang berfungsi sebagai pengganti drop-in untuk perpustakaan standard, jadi saya tidak perlu menukar sebarang kod , hanya suis perpustakaan.
Keputusan Penanda Aras
Untuk mengukur peningkatan prestasi, saya menjalankan beberapa penanda aras membandingkan pengekodan/json dan jsoniter. Berikut ialah ringkasan keputusan:
goos: linux goarch: amd64 pkg: apiSpeedImprove cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics BenchmarkEncodingJSON-12 140383 7381 ns/op BenchmarkJSONIter-12 974605 1217 ns/op PASS ok apiSpeedImprove 3.216s
Jadi, jsoniter adalah kira-kira 6 kali lebih pantas daripada perpustakaan standard.
Saya mula menggunakan semula pengendali HTTP dan bukannya membuat yang baharu untuk setiap permintaan. Dengan menyediakan pengendali sekali dan menggunakannya semula, saya mengurangkan kos pengeluaran untuk membuat pengendali baharu untuk setiap permintaan.
Keputusan Penanda Aras
Berikut ialah hasil penanda aras yang membandingkan pengendali yang digunakan semula berbanding membuat pengendali baharu untuk setiap permintaan:
goos: linux goarch: amd64 pkg: apiSpeedImprove/httpReuse cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics BenchmarkReusedHandler-12 2179 505189 ns/op BenchmarkNewHandlerPerRequest-12 2341 507525 ns/op PASS ok apiSpeedImprove/httpReuse 7.270s
Menggunakan semula pengendali HTTP memberikan sedikit peningkatan prestasi berbanding dengan membuat pengendali baharu untuk setiap permintaan.
Dengan tweak ini saya berjaya mengurangkan masa yang diambil untuk mengumpulkan semua maklumat daripada 24 saat pada mulanya kepada kira-kira 2 saat. Peningkatan yang cukup mantap!
Jika anda berminat dengan kod untuk penanda aras saya, ia boleh didapati di sini
Jika anda menyukai siaran ini dan ingin menyokong kerja saya, anda boleh menderma di sini.
Atas ialah kandungan terperinci Meningkatkan prestasi permintaan API Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!