v2.5Performance
Performance & Monitoring
Velisch hilft dir, Flaschenhälse zu identifizieren und zu beheben - mit nativen Performance-Tools und Metrics.
Native Rust-Kompilierung
Velisch wird direkt in hochoptimierten Rust-Code übersetzt - keine Interpretation, kein GC-Overhead.
Zero-Cost Abstractions
Abstraktionen ohne Laufzeit-Overhead.
Memory Safety
Garantiert ohne Garbage Collector.
Async/Concurrency
Sichere Parallelverarbeitung von Haus aus.
Benchmark-Vergleich
Framework | Requests/sec | Latency (p99) | Memory
----------------|--------------|---------------|--------
Velisch 2.5 | 125,000 | 0.8ms | 12 MB
FastAPI (Py) | 2,500 | 45ms | 180 MB
Express (JS) | 12,000 | 12ms | 95 MB
Go (Gin) | 85,000 | 1.2ms | 18 MBPerformanceMonitor
Messe granular, wie lange bestimmte Abschnitte deines Codes dauern:
use metrics
let monitor = PerformanceMonitor.new();
fn processOrder(order: Order): OrderResult {
monitor.start("validate_stock");
inventory.check(order);
monitor.stop("validate_stock");
monitor.start("payment");
payment.process(order);
monitor.stop("payment");
monitor.start("shipping");
shipping.schedule(order);
monitor.stop("shipping");
log.info(monitor.report());
// Output: { "validate_stock": "12ms", "payment": "156ms", "shipping": "8ms" }
return OrderResult.success(order);
}Caching
@Controller("/api/stats")
struct StatsController {
// Cache-Ergebnis für 5 Minuten
@GET("/daily")
@Cache(ttl: "5m")
fn getDailyStats(): Stats {
// Teure DB Aggregation...
return db.query(Stats).aggregate(...);
}
// Cache pro User (Key wird automatisch generiert)
@Auth
@GET("/user/:id")
@Cache(ttl: "10m", key: "user_stats_{id}")
fn getUserStats(id: string): UserStats {
return db.aggregate(UserStats, { userId: id });
}
// Cache invalidieren
@Auth
@POST("/user/:id/action")
@CacheInvalidate("user_stats_{id}")
fn performAction(id: string): void {
// Nach dieser Aktion wird der Cache gelöscht
}
}MetricsCollector (Prometheus)
Nahtlose Integration mit Prometheus für Produktions-Monitoring:
use metrics
let metrics = MetricsCollector.new();
// Counter für Requests
metrics.increment("http_requests_total", {
"method": req.method,
"status": res.status,
"endpoint": req.path
});
// Histogramm für Latenz
let timer = metrics.startTimer("http_request_duration_seconds");
// ... request verarbeiten ...
timer.observe({ "endpoint": req.path });
// Gauge für aktuelle Werte
metrics.gauge("active_connections", connectionPool.activeCount());
metrics.gauge("queue_size", taskQueue.size());
// Prometheus Endpoint
@GET("/metrics")
fn getMetrics(): string {
return metrics.export();
}Database Query Optimization
// N+1 Problem vermeiden mit Eager Loading
@GET("/api/orders")
fn getOrders(): List<Order> {
return db.query(Order)
.include("user") // User mitladen
.include("items.product") // Items und deren Products
.findAll();
}
// Query Explain für Debugging
fn analyzeQuery(): QueryPlan {
return db.query(User)
.where("active", "=", true)
.orderBy("createdAt", "DESC")
.explain(); // Zeigt Query-Plan
}
// Connection Pooling (automatisch)
// Velisch verwaltet einen Connection Pool
// Konfiguration in config.velin:
// db.poolSize = 20
// db.poolTimeout = "30s"Profiling & Debugging
CPU Profiling
# Mit perf (Linux)
perf record ./my-velin-app
perf report
# Flame Graph generieren
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svgMemory Profiling
# Mit Valgrind
valgrind --tool=massif ./my-velin-app
# Oder mit heaptrack
heaptrack ./my-velin-appBest Practices
Caching nutzen
Cache teure Berechnungen und DB-Queries
Eager Loading
Vermeide N+1 Queries mit .include()
Async I/O
Nutze async/await für I/O-gebundene Operationen
Connection Pooling
Velisch pooled DB-Connections automatisch
Metrics sammeln
Überwache Latenz, Throughput und Fehlerrate
Profiling in Dev
Identifiziere Bottlenecks früh im Entwicklungsprozess