วิธีเพิ่มความเร็วให้กับ Fiber ใน Go
ก่อนอื่นเลย เว็บเฟรมเวิร์คตัวนี้เป็นเว็บเฟรมเวิร์คน้องใหม่ที่อ้างอิง การสร้างและ Style การเขียนมาจาก express.js ซึ่งภายในตัวของมันที่เอาไว้จัดการ Request & Response นั้นไม่ได้ใช้ standard library อย่าง net/http ซึ่งอาจจะเกี่ยวข้องกับเรื่องของ Performance ทางผู้สร้างของ Fiber จึงได้นำ fasthttp มาใช้แทนตัว standard library อย่าง net/http
เริ่มการตั้งค่าให้กับเฟรมเวิร์คของเรา
ซึ่งในบทความนี้เราไม่ได้มาเขียนเรื่องประวัติของเฟรมเวิร์คตัวนี้แต่ว่าในบทความนี้เราจะมาเสริมเกร็ดเล็กๆ น้อยๆ สำหรับการเพิ่มความเร็วให้กับเจ้าตัว Fiber นั่นเอง
วิธีเพิ่มความเร็วให้กับเจ้าตัวเฟรมเวิร์คของเรานั้นไม่ใช่วิธีที่ซับซ้อนอะไรเลย เป็นเพียงแค่การเปลี่ยน Encoder และ Decoder ให้กับ JSON Engine ของเรานั่นเอง ซึ่งก่อนอื่นเลย อยากจะบอกว่า standard library อย่าง encoding/json ไม่ได้ช้าเลยนะ มันถือว่าเร็วมากๆ เลยทีเดียว แต่ว่า ...
มันเร็วแล้วมันก็ต้องเร็วอีกสิ ใช่ครับมันเร็วไม่พอใจเรา ซึ่งเป็นปกติของมนุษย์ครับ เมื่อเห็นอะไรดีกว่าเร็วกว่านิ๊ดนึง อารมณ์ M1 กับ M2 ของ Apple มันเร็วกว่ากันแค่ 20% เอง
ส่วนตัว Encoder และ Decoder ที่เราจะนำมาเปลี่ยนให้กับเจ้าตัว Web Framework ของเรานั้นก็คือ bytedance/sonic
ก่อนอื่นเลย เราต้องทำการติดตั้งตัว Library ดังกล่าวเข้า Go Module ของเราก่อน โดยใช้คำสั่งตามด้านล่างนี้เลย
$ go get -v github.com/bytedance/sonic
พอเราติดตั้งเสร็จแล้ว ให้เราเข้าไปที่หน้าซอร์สโค้ดที่มีที่อยู่ของ FiberConfig ของโปรเจกต์เรา เพื่อ Configure ตัว bytedance/sonic ให้เป็นตัว Encoder กับ Decoder ให้กับเจ้าตัว JSON Engine ของ Fiber โดยการเรียกชื่อตัว Module ของเจ้าตัว sonic ตามด้านล่างเลย
package main
import (
"os"
"github.com/bytedance/sonic"
"github.com/gofiber/fiber/v2"
)
func main() {
// เรียก function init ของมัน marshal() และ unmarshal()
app := fiber.New(fiber.Config{
JSONEncoder: sonic.Marshal,
JSONDecoder: sonic.Unmarshal,
})
app.Get("/", func(c *fiber.Ctx) error {
return c.Status(fiber.StatusOK).JSON(fiber.Map{
"message": "hello, world!",
})
})
app.Listen(os.Getenv("ENDPOINT_PORT"))
}
เสร็จแล้วสำหรับการ Configure เจ้าตัว Encoder และ Decoder สำหรับ JSON Engine ของเรา ง่ายมากเพียงแค่ใช้ sonic.Marshal และ sonic.Unmarshal เข้าไปที่ตัว fiber.Config{} ในส่วนของ Field JSONEncoder และ JSONDecoder เท่านั้นเอง
แต่ว่ายังไงก็ตามการเพิ่ม Performance นั้นขึ้นอยู่กับการเขียนของเราด้วย หวัง Performance ระดับ World-Class แต่ SELECT * FROM TABLE งี้ก็ไม่เอานะครับ อิอิ
บทความที่เกี่ยวข้อง
บทความที่ถูกแสดงนั้นจะเกี่ยวข้องกับบทความที่แท็ก
- การติดตั้ง XAMPP บน WindowsKittithat Patepakorn
11 กุมภาพันธ์ 2566
อ่าน 1 นาที