mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-08-15 19:56:39 +00:00
The admin UI served embedded static files uncompressed and without cache headers: embed.FS has zero mod times, so no Last-Modified, no ETag, no 304s -- every page load re-downloaded ~700KB of css/js in full, which gets painful over slow or tunneled links. Gzip the static tree at generation time (go generate ./weed/admin) and embed only the compressed mirror, shrinking the binary ~1.5MB. The handler hands the pre-compressed bytes to gzip-capable clients, decompresses for the rest, and sets Cache-Control, per-variant content-hash ETags and Vary so repeat loads revalidate with a 304. bootstrap.min.css goes 232KB -> 30KB on the wire. A drift test keeps static_gz/ in sync with static/.
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
//go:build ignore
|
|
|
|
// Regenerates static_gz/, the gzipped mirror of static/ that is embedded
|
|
// into the binary. Run after changing anything under static/:
|
|
//
|
|
// go generate ./weed/admin
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"compress/gzip"
|
|
"fmt"
|
|
"io/fs"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func main() {
|
|
if err := run(); err != nil {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func run() error {
|
|
if err := os.RemoveAll("static_gz"); err != nil {
|
|
return err
|
|
}
|
|
return filepath.WalkDir("static", func(p string, d fs.DirEntry, err error) error {
|
|
if err != nil || d.IsDir() {
|
|
return err
|
|
}
|
|
data, err := os.ReadFile(p)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var buf bytes.Buffer
|
|
zw, err := gzip.NewWriterLevel(&buf, gzip.BestCompression)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, err := zw.Write(data); err != nil {
|
|
return err
|
|
}
|
|
if err := zw.Close(); err != nil {
|
|
return err
|
|
}
|
|
rel, err := filepath.Rel("static", p)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
out := filepath.Join("static_gz", rel+".gz")
|
|
if err := os.MkdirAll(filepath.Dir(out), 0755); err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(out, buf.Bytes(), 0644)
|
|
})
|
|
}
|