[performance] http response encoding / writing improvements (#2374)

This commit is contained in:
kim 2023-11-27 14:00:57 +00:00 committed by GitHub
commit 74700cc803
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
104 changed files with 526 additions and 267 deletions

View file

@ -18,8 +18,6 @@
package hostmeta
import (
"bytes"
"encoding/xml"
"net/http"
"github.com/gin-gonic/gin"
@ -52,21 +50,12 @@ func (m *Module) HostMetaGETHandler(c *gin.Context) {
hostMeta := m.processor.Fedi().HostMetaGet()
// this setup with a separate buffer we encode into is used because
// xml.Marshal does not emit xml.Header by itself
var buf bytes.Buffer
// Preallocate buffer of reasonable length.
buf.Grow(len(xml.Header) + 64)
// No need to check for error on write to buffer.
_, _ = buf.WriteString(xml.Header)
// Encode host-meta as XML to in-memory buffer.
if err := xml.NewEncoder(&buf).Encode(hostMeta); err != nil {
apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1)
return
}
c.Data(http.StatusOK, HostMetaContentType, buf.Bytes())
// Encode XML HTTP response.
apiutil.EncodeXMLResponse(
c.Writer,
c.Request,
http.StatusOK,
HostMetaContentType,
hostMeta,
)
}