From 4950ce485f7d931890fcfd2ee287b6df1b5db435 Mon Sep 17 00:00:00 2001 From: Dominik Braun Date: Thu, 8 Aug 2019 07:59:02 +0200 Subject: Part 1: Optimize using compiler's inliner (#2687) * optimized functions for inlining * added note regarding ResponseWriterWrapper * optimzed browseWrite* methods for FileServer * created benchmarks for comparison * creating browseListing instance in each function * created benchmarks for openResponseWriter * removed benchmarks of old implementations * implemented sync.Pool for byte buffers * using global sync.Pool for writing JSON/HTML --- modules/caddyhttp/fileserver/staticfiles.go | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'modules/caddyhttp/fileserver/staticfiles.go') diff --git a/modules/caddyhttp/fileserver/staticfiles.go b/modules/caddyhttp/fileserver/staticfiles.go index 761dfc3..a66b753 100644 --- a/modules/caddyhttp/fileserver/staticfiles.go +++ b/modules/caddyhttp/fileserver/staticfiles.go @@ -15,6 +15,7 @@ package fileserver import ( + "bytes" "fmt" "html/template" weakrand "math/rand" @@ -25,6 +26,7 @@ import ( "path/filepath" "strconv" "strings" + "sync" "time" "github.com/caddyserver/caddy/v2" @@ -46,6 +48,7 @@ type FileServer struct { Hide []string `json:"hide,omitempty"` IndexNames []string `json:"index_names,omitempty"` Browse *Browse `json:"browse,omitempty"` + // TODO: Content negotiation } @@ -301,6 +304,12 @@ func calculateEtag(d os.FileInfo) string { var defaultIndexNames = []string{"index.html"} +var bufPool = sync.Pool{ + New: func() interface{} { + return new(bytes.Buffer) + }, +} + const minBackoff, maxBackoff = 2, 5 // Interface guards -- cgit v1.2.3