hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit b660ea8d545d6ba5479dd28a670044d57e5d196f
parent 64f88f3011de5a510d8e6d6bad8ac4a091b11c0c
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Tue,  4 May 2021 17:45:24 +0200

Add a benchmark

Diffstat:
Mhugolib/pages_test.go | 38+++++++++++++++++++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git 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)
+				}
+			})
+		}
+	}
+}