diff --git a/hugolib/pages_test.go b/hugolib/pages_test.go index 0d879d2c..30e9e59d 100644 --- a/hugolib/pages_test.go +++ b/hugolib/pages_test.go @@ -11,17 +11,21 @@ import ( ) func newPagesPrevNextTestSite(t testing.TB, numPages int) *sitesBuilder { + categories := []string{"blue", "green", "red", "orange", "indigo", "amber", "lime"} + cat1, cat2 := categories[rand.Intn(len(categories))], categories[rand.Intn(len(categories))] + categoriesSlice := fmt.Sprintf("[%q,%q]", cat1, cat2) pageTemplate := ` --- title: "Page %d" weight: %d +categories: %s --- ` b := newTestSitesBuilder(t) for i := 1; i <= numPages; i++ { - b.WithContent(fmt.Sprintf("page%d.md", i), fmt.Sprintf(pageTemplate, i, rand.Intn(numPages))) + b.WithContent(fmt.Sprintf("page%d.md", i), fmt.Sprintf(pageTemplate, i, rand.Intn(numPages), categoriesSlice)) } return b @@ -81,3 +85,35 @@ func BenchmarkPagesPrevNext(b *testing.B) { } } } + +func BenchmarkPagePageCollections(b *testing.B) { + type Variant struct { + name string + run func(p page.Page) + } + + for _, variant := range []Variant{ + {".Pages", func(p page.Page) { p.Pages() }}, + {".RegularPages", func(p page.Page) { p.RegularPages() }}, + {".RegularPagesRecursive", func(p page.Page) { p.RegularPagesRecursive() }}, + } { + for _, numPages := range []int{300, 5000} { + b.Run(fmt.Sprintf("%s-%d", variant.name, numPages), func(b *testing.B) { + b.StopTimer() + builder := newPagesPrevNextTestSite(b, numPages) + builder.Build(BuildCfg{SkipRender: true}) + var pages page.Pages + for _, p := range builder.H.Sites[0].Pages() { + if !p.IsPage() { + pages = append(pages, p) + } + } + b.StartTimer() + for i := 0; i < b.N; i++ { + p := pages[rand.Intn(len(pages))] + variant.run(p) + } + }) + } + } +}