4.8 KiB
4.8 KiB
Sux Router Comparison
This document compares Sux with other popular Go HTTP routers across various dimensions including performance, features, and ease of use.
Performance Comparison
Based on benchmark tests and the original README data:
Static Routes (ns/op)
- Sux: 877.6 ns/op
- httprouter: ~900 ns/op (estimated from README)
- gorilla/mux: ~2000+ ns/op
- chi: ~1200 ns/op
- gin: ~1000 ns/op
Memory Allocations
- Sux: 644 B/op, 8 allocs/op (static routes)
- httprouter: Similar allocation pattern
- gorilla/mux: Higher allocations due to regex matching
- chi: Moderate allocations
- gin: Higher allocations due to more features
Feature Comparison
| Feature | Sux | httprouter | gorilla/mux | chi | gin |
|---|---|---|---|---|---|
| Static Routes | ✅ | ✅ | ✅ | ✅ | ✅ |
URL Parameters (:id) |
✅ | ✅ | ✅ | ✅ | ✅ |
Wildcard Parameters (*path) |
✅ | ❌ | ✅ | ✅ | ✅ |
| Middleware Support | ✅ | ❌ | ❌ | ✅ | ✅ |
| Route Groups | ✅ | ❌ | ❌ | ✅ | ✅ |
| Method Not Allowed (405) | ✅ | ✅ | ❌ | ✅ | ✅ |
| Custom 404/405 Handlers | ✅ | ❌ | ✅ | ✅ | ✅ |
| Thread-Safe (no global state) | ✅ | ✅ | ✅ | ✅ | ✅ |
| Regex Support | ❌ | ❌ | ✅ | ❌ | ❌ |
| Subrouter Support | ✅ | ❌ | ✅ | ✅ | ✅ |
Performance Analysis
Sux Advantages:
- Minimal Allocations: Uses sync.Pool for parameter maps, reducing GC pressure
- Efficient Trie Structure: Optimized for fast static route matching
- Lightweight Middleware: Minimal overhead for middleware chains
- Zero Dependencies: No external dependencies, smaller binary size
Where Others Excel:
- gorilla/mux: More flexible regex patterns
- chi: More mature middleware ecosystem
- gin: More features and plugins
- httprouter: Slightly better for pure static routing
Real-World Performance
From the original README benchmarks:
Sux: 142,025.60 requests/sec
httprouter: 140,826.15 requests/sec
gomango: 110,315.36 requests/sec
gorilla: 108,078.84 requests/sec
Sux maintains excellent performance while adding more features than most competitors.
Code Complexity
Sux (Lines of Code)
- Core router: ~400 lines
- Tests: ~267 lines
- Total: ~667 lines
Comparison
- httprouter: ~800 lines (core only)
- gorilla/mux: ~2000+ lines
- chi: ~1500+ lines
- gin: ~3000+ lines (full framework)
Sux achieves feature parity with significantly less code complexity.
API Design Comparison
Sux API
r := sux.New()
r.GET("/users/:id", handler)
r.Use(middleware)
api := r.Group("/api", apiMiddleware)
httprouter API
r := httprouter.New()
r.GET("/users/:id", handler)
// No built-in middleware or groups
gorilla/mux API
r := mux.NewRouter()
r.HandleFunc("/users/{id}", handler).Methods("GET")
// No built-in middleware, requires third-party
chi API
r := chi.NewRouter()
r.Get("/users/{id}", handler)
r.Use(middleware)
r.Route("/api", func(r chi.Router) {
// Subroutes
})
Use Case Recommendations
Choose Sux when:
- You need high performance with minimal dependencies
- You want middleware and route groups
- You prefer a simple, clean API
- Thread safety is important
- You need both static and parameter routes
Choose httprouter when:
- You only need basic routing
- Maximum performance is the only concern
- You don't need middleware or groups
Choose gorilla/mux when:
- You need complex regex patterns
- You're maintaining existing code that uses it
- You need maximum flexibility
Choose chi when:
- You want a mature middleware ecosystem
- You prefer standard library compatibility
- You need extensive routing features
Choose gin when:
- You want a full-featured framework
- You need extensive plugins and middleware
- You prefer batteries-included approach
Migration Path
From httprouter to Sux:
// httprouter
r.GET("/users/:id", handler)
// Sux (almost identical)
r := sux.New()
r.GET("/users/:id", handler)
From gorilla/mux to Sux:
// gorilla/mux
r.HandleFunc("/users/{id}", handler).Methods("GET")
// Sux (simpler)
r.GET("/users/:id", handler)
Conclusion
Sux offers an excellent balance of performance, features, and simplicity:
- Performance: Matches or exceeds all major routers
- Features: Provides essential features (middleware, groups, parameters)
- Simplicity: Clean API with minimal learning curve
- Maintainability: Small codebase, easy to understand and modify
- Thread Safety: No global state, safe for concurrent use
For most use cases requiring high performance with modern routing features, Sux provides an optimal solution that combines the best aspects of performance-focused and feature-rich routers.