diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2021-07-13 11:41:02 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2021-07-15 17:14:26 +0200 |
commit | 022c4795510306e08a4aba31504ca382d41c7fac (patch) | |
tree | d4c29f62038d0f336d90f32f46bc5b4f5c3ddc28 /hugofs/filter_fs.go | |
parent | f27e542442d19436f1428cc22bb03aca398d37a7 (diff) |
hugofs: Make FileMeta a struct
This commit started out investigating a `concurrent map read write` issue, ending by replacing the map with a struct.
This is easier to reason about, and it's more effective:
```
name old time/op new time/op delta
SiteNew/Regular_Deep_content_tree-16 71.5ms ± 3% 69.4ms ± 5% ~ (p=0.200 n=4+4)
name old alloc/op new alloc/op delta
SiteNew/Regular_Deep_content_tree-16 29.7MB ± 0% 27.9MB ± 0% -5.82% (p=0.029 n=4+4)
name old allocs/op new allocs/op delta
SiteNew/Regular_Deep_content_tree-16 313k ± 0% 303k ± 0% -3.35% (p=0.029 n=4+4)
```
See #8749
Diffstat (limited to 'hugofs/filter_fs.go')
-rw-r--r-- | hugofs/filter_fs.go | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/hugofs/filter_fs.go b/hugofs/filter_fs.go index bee4d05d2..9da63bbb7 100644 --- a/hugofs/filter_fs.go +++ b/hugofs/filter_fs.go @@ -44,7 +44,7 @@ func NewLanguageFs(langs map[string]int, fs afero.Fs) (afero.Fs, error) { } meta := fi.(FileMetaInfo).Meta() - lang := meta.Lang() + lang := meta.Lang fileLang, translationBaseName, translationBaseNameWithExt := langInfoFrom(langs, fi.Name()) weight := 0 @@ -58,14 +58,16 @@ func NewLanguageFs(langs map[string]int, fs afero.Fs) (afero.Fs, error) { lang = fileLang } - fim := NewFileMetaInfo(fi, FileMeta{ - metaKeyLang: lang, - metaKeyWeight: weight, - metaKeyOrdinal: langs[lang], - metaKeyTranslationBaseName: translationBaseName, - metaKeyTranslationBaseNameWithExt: translationBaseNameWithExt, - metaKeyClassifier: files.ClassifyContentFile(fi.Name(), meta.GetOpener()), - }) + fim := NewFileMetaInfo( + fi, + &FileMeta{ + Lang: lang, + Weight: weight, + Ordinal: langs[lang], + TranslationBaseName: translationBaseName, + TranslationBaseNameWithExt: translationBaseNameWithExt, + Classifier: files.ClassifyContentFile(fi.Name(), meta.OpenFunc), + }) fis[i] = fim } @@ -74,9 +76,9 @@ func NewLanguageFs(langs map[string]int, fs afero.Fs) (afero.Fs, error) { all := func(fis []os.FileInfo) { // Maps translation base name to a list of language codes. translations := make(map[string][]string) - trackTranslation := func(meta FileMeta) { - name := meta.TranslationBaseNameWithExt() - translations[name] = append(translations[name], meta.Lang()) + trackTranslation := func(meta *FileMeta) { + name := meta.TranslationBaseNameWithExt + translations[name] = append(translations[name], meta.Lang) } for _, fi := range fis { if fi.IsDir() { @@ -90,9 +92,9 @@ func NewLanguageFs(langs map[string]int, fs afero.Fs) (afero.Fs, error) { for _, fi := range fis { fim := fi.(FileMetaInfo) - langs := translations[fim.Meta().TranslationBaseNameWithExt()] + langs := translations[fim.Meta().TranslationBaseNameWithExt] if len(langs) > 0 { - fim.Meta()["translations"] = sortAndremoveStringDuplicates(langs) + fim.Meta().Translations = sortAndremoveStringDuplicates(langs) } } } @@ -108,7 +110,7 @@ func NewFilterFs(fs afero.Fs) (afero.Fs, error) { applyMeta := func(fs *FilterFs, name string, fis []os.FileInfo) { for i, fi := range fis { if fi.IsDir() { - fis[i] = decorateFileInfo(fi, fs, fs.getOpener(fi.(FileMetaInfo).Meta().Filename()), "", "", nil) + fis[i] = decorateFileInfo(fi, fs, fs.getOpener(fi.(FileMetaInfo).Meta().Filename), "", "", nil) } } } |