aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/server
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2025-07-18 15:27:01 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2025-07-18 15:27:01 -0400
commit6469090be4935f17d2dfafcee8e41ebff87f2e89 (patch)
tree307d7a33432a547a33cf8f19d699df5f4884c702 /pkg/server
parentfc2fbe46f25f1f88b5709d191434a96099446277 (diff)
Add object pool for server jsonify buffers
Diffstat (limited to 'pkg/server')
-rw-r--r--pkg/server/server.go13
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"))