diff options
| author | JP Appel <jeanpierre.appel01@gmail.com> | 2025-07-18 15:27:01 -0400 |
|---|---|---|
| committer | JP Appel <jeanpierre.appel01@gmail.com> | 2025-07-18 15:27:01 -0400 |
| commit | 6469090be4935f17d2dfafcee8e41ebff87f2e89 (patch) | |
| tree | 307d7a33432a547a33cf8f19d699df5f4884c702 /pkg | |
| parent | fc2fbe46f25f1f88b5709d191434a96099446277 (diff) | |
Add object pool for server jsonify buffers
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/server/server.go | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/pkg/server/server.go b/pkg/server/server.go index adde6ad..c08d5a4 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -6,6 +6,7 @@ import ( "log/slog" "net/http" "strings" + "sync" "time" "github.com/jpappel/atlas/pkg/data" @@ -24,6 +25,11 @@ func info(w http.ResponseWriter, r *http.Request) { func New(db *data.Query) *http.ServeMux { mux := http.NewServeMux() + outputBufPool := &sync.Pool{} + outputBufPool.New = func() any { + return &bytes.Buffer{} + } + mux.HandleFunc("/", info) mux.HandleFunc("/search", func(w http.ResponseWriter, r *http.Request) { b := &strings.Builder{} @@ -62,8 +68,11 @@ func New(db *data.Query) *http.ServeMux { w.Header().Add("Last-Modified", maxFileTime.UTC().Format(http.TimeFormat)) } - var buf bytes.Buffer - _, err = query.JsonOutput{}.OutputTo(&buf, docs) + buf, ok := outputBufPool.Get().(*bytes.Buffer) + if !ok { + panic("Expected *bytes.Buffer in pool") + } + _, err = query.JsonOutput{}.OutputTo(buf, docs) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("Error while writing output")) |
