feature-image

วิธีเพิ่มความเร็วให้กับ Fiber ใน Go

บทความใช้เวลาในการอ่าน 1 นาทีอัปเดตล่าสุดเมื่อ: 22 กุมภาพันธ์ 2566 เวลา 03:23:29

ก่อนอื่นเลย เว็บเฟรมเวิร์คตัวนี้เป็นเว็บเฟรมเวิร์คน้องใหม่ที่อ้างอิง การสร้างและ 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

ภาพหน้า Repository ของ 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 งี้ก็ไม่เอานะครับ อิอิ

ผู้เขียนหลักของบทความ

author's profile image

โพสต์เมื่อ: 20 กุมภาพันธ์ 2566

Yongyuth ChuankhuntodDeveloper and Author

แชร์บทความ

บทความที่เกี่ยวข้อง

บทความที่ถูกแสดงนั้นจะเกี่ยวข้องกับบทความที่แท็ก

  • การติดตั้ง XAMPP บน Windows
    Kittithat Patepakorn

    11 กุมภาพันธ์ 2566

      

    อ่าน 1 นาที