diff options
author | Bjørn Erik Pedersen <[email protected]> | 2022-09-26 17:34:20 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2022-09-26 19:02:25 +0200 |
commit | 29ccb3606967a4e14ebee383decb38fae6c447dc (patch) | |
tree | 987dd3c25328fe01dafebd77aebd66f039681a99 /hugofs | |
parent | d8aba18e05895723a6e42ea19be1cfbbed5bf98c (diff) | |
download | hugo-29ccb3606967a4e14ebee383decb38fae6c447dc.tar.gz hugo-29ccb3606967a4e14ebee383decb38fae6c447dc.zip |
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
Diffstat (limited to 'hugofs')
-rw-r--r-- | hugofs/fs.go | 4 | ||||
-rw-r--r-- | hugofs/hasbytes_fs.go | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/hugofs/fs.go b/hugofs/fs.go index 63c25a4c0..51bbe0619 100644 --- a/hugofs/fs.go +++ b/hugofs/fs.go @@ -40,8 +40,7 @@ type Fs struct { // It's mounted inside publishDir (default /public). PublishDir afero.Fs - // PublishDirStatic is the file system used for static files when --renderStaticToDisk is set. - // When this is set, PublishDir is set to write to memory. + // PublishDirStatic is the file system used for static files. PublishDirStatic afero.Fs // PublishDirServer is the file system used for serving the public directory with Hugo's development server. @@ -142,7 +141,6 @@ func isWrite(flag int) bool { // MakeReadableAndRemoveAllModulePkgDir makes any subdir in dir readable and then // removes the root. // TODO(bep) move this to a more suitable place. -// func MakeReadableAndRemoveAllModulePkgDir(fs afero.Fs, dir string) (int, error) { // Safe guard if !strings.Contains(dir, "pkg") { diff --git a/hugofs/hasbytes_fs.go b/hugofs/hasbytes_fs.go index b5f82877e..3d32a828f 100644 --- a/hugofs/hasbytes_fs.go +++ b/hugofs/hasbytes_fs.go @@ -27,12 +27,13 @@ var ( type hasBytesFs struct { afero.Fs + shouldCheck func(name string) bool hasBytesCallback func(name string, match bool) pattern []byte } -func NewHasBytesReceiver(delegate afero.Fs, hasBytesCallback func(name string, match bool), pattern []byte) afero.Fs { - return &hasBytesFs{Fs: delegate, hasBytesCallback: hasBytesCallback, pattern: pattern} +func NewHasBytesReceiver(delegate afero.Fs, shouldCheck func(name string) bool, hasBytesCallback func(name string, match bool), pattern []byte) afero.Fs { + return &hasBytesFs{Fs: delegate, shouldCheck: shouldCheck, hasBytesCallback: hasBytesCallback, pattern: pattern} } func (fs *hasBytesFs) UnwrapFilesystem() afero.Fs { @@ -56,6 +57,9 @@ func (fs *hasBytesFs) OpenFile(name string, flag int, perm os.FileMode) (afero.F } func (fs *hasBytesFs) wrapFile(f afero.File) afero.File { + if !fs.shouldCheck(f.Name()) { + return f + } return &hasBytesFile{ File: f, hbw: &hugio.HasBytesWriter{ |