Чтение каталога должно быть измеримым
Маршрут связывает HTTP-запрос с обработчиком, а JSON-кодировщик преобразует типизированные записи в ответ. Замерьте задержку чтения на фиксированном наборе событий до и после оптимизации, не меняя объём входных данных.
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"time"
)
type Event struct {
ID string
Name string
StartsAt string
}
var events = []Event{
{ID: "evt-1", Name: "Кинопоказ", StartsAt: "2026-10-01T18:00:00Z"},
{ID: "evt-2", Name: "Лекция", StartsAt: "2026-10-02T16:30:00Z"},
}
func eventsHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
return
}
started := time.Now()
w.Header().Set("Content-Type", "application/json; charset=utf-8")
if err := json.NewEncoder(w).Encode(events); err != nil {
log.Printf("encode events response: %v", err)
return
}
log.Printf("events read completed in %s", time.Since(started))
}
func main() {
http.HandleFunc("/events", eventsHandler)
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(fmt.Errorf("serve events API: %w", err))
}
}
Сначала получите базовые p50 и p95, затем меняйте один участок чтения за раз и повторяйте ту же серию запросов. Измеряйте задержку обработчика и отдельно следите за кодами ответа; содержимое событий в лог не записывайте.