Belajar HonoJS - Performance Optimization di Edge
Episode 16 of 21

Belajar HonoJS - Performance Optimization di Edge

Mengoptimasi performa Hono di edge: benchmarking dengan autocannon, tiny preset untuk bundle < 12KB, response caching dengan Cache-Control, profiling di Cloudflare Workers, dan memory management untuk stateless workers.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 15 kita meng-setup OpenAPI documentation, pada episode ini kita akan memahami cara mengoptimasi performa Hono di edge — krusial untuk Cloudflare Workers di mana CPU time dibatasi per request.

Benchmarking Hono

Tools Benchmarking

Install autocannon
bun add -g autocannon
Jalankan benchmark
autocannon -c 100 -d 10 http://localhost:8787

Target untuk simple route di Cloudflare Workers: ~840k req/s (Mei 2026).

Benchmark Meaningful

Benchmark dengan payload dan headers
autocannon -c 100 -d 10 -m POST \
  -H "Content-Type=application/json" \
  -b '{"name":"test","email":"test@example.com"}' \
  http://localhost:8787/users

Tiny Preset

Mengapa Tiny?

Untuk edge deployment, bundle size sangat berpengaruh. Hono menyediakan tiny preset yang mengurangi features dan bundle size:

Gunakan tiny preset
import { Hono } from 'hono/tiny'
 
const app = new Hono()
// < 12KB total bundle

Tiny preset menghilangkan beberapa fitur yang tidak selalu dibutuhkan — cukup untuk simple API.

Response Caching

Cache-Control Headers

Cache-Control untuk response
app.get('/data', (c) => {
  c.header('Cache-Control', 'public, max-age=3600')
  return c.json({ data: 'expensive computation' })
})

CDN Caching dengan Cloudflare

Cloudflare cache headers
app.get('/api/public-data', (c) => {
  c.header('Cache-Control', 'public, max-age=300, s-maxage=3600')
  c.header('CDN-Cache-Control', 'max-age=3600')
  return c.json({ data: 'cached data' })
})

s-maxage berlaku untuk CDN (Cloudflare), max-age untuk browser.

Pre-computed Responses

Cache static JSON responses
const staticData = { version: '1.0', features: ['fast', 'tiny', 'edge'] }
 
app.get('/config', (c) => {
  c.header('Cache-Control', 'public, max-age=86400')
  return c.json(staticData)
})

Profiling di Cloudflare Workers

Workers Analytics

Cloudflare dashboard menyediakan metrics:

  • Request count: jumlah request per detik.
  • Duration: waktu eksekusi per request.
  • Errors: jumlah error (5xx, 4xx).

CPU Time Monitoring

Cloudflare Workers memiliki CPU time limit per request. Monitor di dashboard:

Monitor CPU usage
app.get('/heavy', async (c) => {
  const start = performance.now()
  const result = await heavyComputation()
  const duration = performance.now() - start
  console.log(`CPU time: ${duration}ms`)
  return c.json(result)
})

Memory Management

Stateless Workers

Cloudflare Workers bersifat stateless — hindari global state yang bertambah:

Hindari global state
// BAD: global state bertambah
const cache = new Map()
 
// GOOD: gunakan Cloudflare KV untuk persistent state
app.get('/data', async (c) => {
  const cached = await c.env.MY_KV.get('data')
  if (cached) return c.json(JSON.parse(cached))
 
  const data = await fetchData()
  await c.env.MY_KV.put('data', JSON.stringify(data), { expirationTtl: 3600 })
  return c.json(data)
})

Durable Objects untuk Persistent State

Durable Objects untuk state persistent
// Durable Objects menyimpan state yang persistent
// dan bisa diakses dari multiple requests

Warning

Cloudflare Workers memiliki limit: 10ms CPU time per request (free tier) atau 30ms (paid). Pastikan tidak ada operasi blocking yang melebihi limit ini.

Penutup

Pada episode 16 ini, kalian telah memahami cara mengoptimasi performa Hono di edge.

Inti yang harus dibawa pulang:

  • Benchmark dengan autocannon: target ~840k req/s.
  • Tiny preset: bundle < 12KB untuk edge deployment.
  • Cache-Control headers untuk response caching.
  • Workers Analytics untuk profiling.
  • Stateless: hindari global state, gunakan KV/Durable Objects.

Di episode 17 selanjutnya kita akan memahami testing dengan Bun test dan Vitest — unit testing routes, integration testing, E2E testing, dan coverage. Sampai jumpa di episode 17!

Belajar HonoJS - Performance Optimization di Edge | Belajar HonoJS