From 29ccb3606967a4e14ebee383decb38fae6c447dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 26 Sep 2022 17:34:20 +0200 Subject: Fix /static performance regression from Hugo 0.103.0 In `v0.103.0` we added support for `resources.PostProcess` for all file types, not just HTML. We had benchmarks that said we were fine in that department, but those did not consider the static file syncing. This fixes that by: * Making sure that the /static syncer always gets its own file system without any checks for the post process token. * For dynamic files (e.g. rendered HTML files) we add an additional check to make sure that we skip binary files (e.g. images) Fixes #10328 --- deps/deps.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'deps') diff --git a/deps/deps.go b/deps/deps.go index e1cbfce06..02730e825 100644 --- a/deps/deps.go +++ b/deps/deps.go @@ -2,6 +2,8 @@ package deps import ( "fmt" + "path/filepath" + "strings" "sync" "sync/atomic" "time" @@ -246,16 +248,30 @@ func New(cfg DepsCfg) (*Deps, error) { execHelper := hexec.New(securityConfig) var filenameHasPostProcessPrefixMu sync.Mutex - cb := func(name string, match bool) { + hashBytesReceiverFunc := func(name string, match bool) { if !match { return } filenameHasPostProcessPrefixMu.Lock() d.FilenameHasPostProcessPrefix = append(d.FilenameHasPostProcessPrefix, name) filenameHasPostProcessPrefixMu.Unlock() + } + // Skip binary files. + hashBytesSHouldCheck := func(name string) bool { + ext := strings.TrimPrefix(filepath.Ext(name), ".") + mime, _, found := cfg.MediaTypes.GetBySuffix(ext) + if !found { + return false + } + switch mime.MainType { + case "text", "application": + return true + default: + return false + } } - fs.PublishDir = hugofs.NewHasBytesReceiver(fs.PublishDir, cb, []byte(postpub.PostProcessPrefix)) + fs.PublishDir = hugofs.NewHasBytesReceiver(fs.PublishDir, hashBytesSHouldCheck, hashBytesReceiverFunc, []byte(postpub.PostProcessPrefix)) ps, err := helpers.NewPathSpec(fs, cfg.Language, logger) if err != nil { -- cgit v1.2.3