Further performance optimization
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"io"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -56,3 +60,52 @@ func TestServeStaticCaching(t *testing.T) {
|
||||
t.Errorf("font: %q", w.Header().Get("Cache-Control"))
|
||||
}
|
||||
}
|
||||
|
||||
func TestServeStaticGzip(t *testing.T) {
|
||||
h := serveStatic()
|
||||
get := func(url, acceptEncoding, ifNoneMatch string) *httptest.ResponseRecorder {
|
||||
r := httptest.NewRequest(http.MethodGet, url, nil)
|
||||
if acceptEncoding != "" {
|
||||
r.Header.Set("Accept-Encoding", acceptEncoding)
|
||||
}
|
||||
if ifNoneMatch != "" {
|
||||
r.Header.Set("If-None-Match", ifNoneMatch)
|
||||
}
|
||||
w := httptest.NewRecorder()
|
||||
h.ServeHTTP(w, r)
|
||||
return w
|
||||
}
|
||||
want, _ := assets.ReadFile("assets/style.css")
|
||||
|
||||
w := get("/_/style.css", "gzip, deflate, br", "")
|
||||
if w.Code != 200 || w.Header().Get("Content-Encoding") != "gzip" || w.Header().Get("Vary") != "Accept-Encoding" {
|
||||
t.Fatalf("gzip: %d %q %q", w.Code, w.Header().Get("Content-Encoding"), w.Header().Get("Vary"))
|
||||
}
|
||||
if ct := w.Header().Get("Content-Type"); !strings.HasPrefix(ct, "text/css") {
|
||||
t.Errorf("content-type: %q", ct)
|
||||
}
|
||||
zr, err := gzip.NewReader(w.Body)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
got, _ := io.ReadAll(zr)
|
||||
if !bytes.Equal(got, want) {
|
||||
t.Errorf("gzip body does not decompress to style.css")
|
||||
}
|
||||
|
||||
etag := w.Header().Get("ETag")
|
||||
if w := get("/_/style.css", "gzip", etag); w.Code != http.StatusNotModified {
|
||||
t.Errorf("gzip revalidate: got %d, want 304", w.Code)
|
||||
}
|
||||
|
||||
for _, ae := range []string{"", "identity", "gzip;q=0"} {
|
||||
w := get("/_/style.css", ae, "")
|
||||
if w.Header().Get("Content-Encoding") != "" || !bytes.Equal(w.Body.Bytes(), want) {
|
||||
t.Errorf("Accept-Encoding %q: got encoding %q", ae, w.Header().Get("Content-Encoding"))
|
||||
}
|
||||
}
|
||||
|
||||
if w := get("/_/fonts/IosevkaSlab.woff2", "gzip", ""); w.Header().Get("Content-Encoding") != "" {
|
||||
t.Errorf("font should not be re-compressed")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user