Episode ini membahas tips performance dan best practices Fiber v3: batasi middleware, gunakan pooling fasthttp dan prefork, render template dengan github.com/gofiber/template, serta sajikan file dan folder asset publik dengan app.Static.

Fiber dibangun di atas fasthttp dan sangat cepat — tapi performa tetap bergantung pada cara kita memakainya. Episode 12 membahas tips performance dan best practices: membatasi middleware, memanfaatkan pooling fasthttp, render template, dan menyajikan asset publik dengan benar.
Performa adalah hasil kumulatif. Sedikit pemborosan di setiap middleware akan terasa saat lalu lintas tinggi. Topik ini juga melengkapi bagian aplikasi web yang selama ini belum tersentuh: halaman HTML dari server.
Setiap middleware menambah biaya per request. Pasang middleware hanya jika dibutuhkan, dan pasang pada group, bukan global:
app := fiber.New()
app.Use(logger.New())
app.Use(recover.New())
api := app.Group("/api", authMiddleware())
admin := app.Group("/admin", authMiddleware(), rateLimiter())logger dan recover memang wajib global. Tapi authMiddleware cukup untuk group /api, dan rateLimiter hanya untuk /admin. Middleware yang terlalu banyak di level global memperlambat seluruh route tanpa alasan.
Fiber memakai fasthttp yang me-reuse koneksi dan buffer. Hindari menyimpan pointer *fiber.Ctx di luar scope handler:
func badHandler(c fiber.Ctx) error {
globalCtx = &c // jangan simpan ctx: di-reuse antar request
return nil
}
func goodHandler(c fiber.Ctx) error {
result := c.Params("id") // salin data yang dibutuhkan
storeResult(result)
return nil
}Context fasthttp didaur ulang setelah request selesai. Menyimpan pointer Ctx di variabel global atau goroutine akan membaca data request yang sudah kedaluwarsa. Selalu salin nilai yang dibutuhkan sebelum handler selesai.
Prefork menjalankan beberapa worker, satu per core CPU. Ini melipatgandakan throughput di mesin multicore:
app := fiber.New(fiber.Config{
Prefork: true,
})Dengan Prefork: true, Fiber membuat satu proses worker per core dan berbagi port. Cocok untuk produksi; untuk development lebih baik matikan karena hot-reload bekerja lebih sederhana dengan satu proses.
Fiber tidak menaruh template engine di inti. Gunakan package github.com/gofiber/template yang menyediakan banyak engine — HTML, Pug, Mustache, dan lainnya:
import "github.com/gofiber/template/html/v2"
engine := html.New("./views", ".html")
app := fiber.New(fiber.Config{
Views: engine,
})html.New("./views", ".html") memuat semua file .html dari folder views. Engine lain tinggal ganti import, misalnya template/pug/v2 atau template/mustache/v2 — antarmuka fiber.Views tetap sama.
Dengan Views terpasang, handler bisa merender halaman HTML lengkap dengan data:
app.Get("/", func(c fiber.Ctx) error {
return c.Render("index", fiber.Map{
"Title": "Halaman Utama",
"User": map[string]any{"Name": "Budi"},
}, "layouts/main")
})c.Render("index", data, "layouts/main") merender template index dengan data, lalu membungkusnya ke layout layouts/main. Hasilnya halaman HTML lengkap dari server — pola utama untuk aplikasi yang bukan murni API.
app.Static melayani file dari folder, dan app.StaticIndex mengatur file index folder:
app.Static("/", "./public")
app.StaticIndex("/", "./public/index.html")app.Static("/", "./public") memetakan / ke folder public. Jika ./public/index.html ada, route / langsung merespons halaman tersebut — tanpa perlu handler tambahan. Untuk file tunggal, app.Static("/favicon.ico", "./public/favicon.ico").
curl http://localhost:3000/
curl http://localhost:3000/public/logo.pngRequest pertama merender template index dengan layout; request kedua mengambil file dari folder public. Cek log untuk memastikan middleware logger tetap mencatat keduanya.
Inti yang harus dibawa pulang:
*fiber.Ctx di luar scope handler karena fasthttp me-reuse ctx.Prefork: true memanfaatkan seluruh core untuk throughput lebih tinggi.github.com/gofiber/template menyediakan engine HTML, Pug, Mustache, dan lainnya.c.Render(name, data, layout) merender halaman lengkap dari server.app.Static dan app.StaticIndex melayani folder serta file asset publik.Di episode 13 selanjutnya kita membahas server events (SSE) — streaming event ke browser dengan EventSource, hooking events, dan event listeners di Fiber v3.