package goquery import ( "testing" ) func BenchmarkFind(b *testing.B) { var n int for i := 0; i < b.N; i++ { if n == 0 { n = DocB().Find("dd").Length() } else { DocB().Find("dd") } } b.Logf("Find=%d", n) } func BenchmarkFindWithinSelection(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("ul") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.Find("a[class]").Length() } else { sel.Find("a[class]") } } b.Logf("FindWithinSelection=%d", n) } func BenchmarkFindSelection(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("ul") sel2 := DocW().Find("span") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.FindSelection(sel2).Length() } else { sel.FindSelection(sel2) } } b.Logf("FindSelection=%d", n) } func BenchmarkFindNodes(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("ul") sel2 := DocW().Find("span") nodes := sel2.Nodes b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.FindNodes(nodes...).Length() } else { sel.FindNodes(nodes...) } } b.Logf("FindNodes=%d", n) } func BenchmarkContents(b *testing.B) { var n int b.StopTimer() sel := DocW().Find(".toclevel-1") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.Contents().Length() } else { sel.Contents() } } b.Logf("Contents=%d", n) } func BenchmarkContentsFiltered(b *testing.B) { var n int b.StopTimer() sel := DocW().Find(".toclevel-1") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ContentsFiltered("a[href=\"#Examples\"]").Length() } else { sel.ContentsFiltered("a[href=\"#Examples\"]") } } b.Logf("ContentsFiltered=%d", n) } func BenchmarkChildren(b *testing.B) { var n int b.StopTimer() sel := DocW().Find(".toclevel-2") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.Children().Length() } else { sel.Children() } } b.Logf("Children=%d", n) } func BenchmarkChildrenFiltered(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h3") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ChildrenFiltered(".editsection").Length() } else { sel.ChildrenFiltered(".editsection") } } b.Logf("ChildrenFiltered=%d", n) } func BenchmarkParent(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.Parent().Length() } else { sel.Parent() } } b.Logf("Parent=%d", n) } func BenchmarkParentFiltered(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ParentFiltered("ul[id]").Length() } else { sel.ParentFiltered("ul[id]") } } b.Logf("ParentFiltered=%d", n) } func BenchmarkParents(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("th a") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.Parents().Length() } else { sel.Parents() } } b.Logf("Parents=%d", n) } func BenchmarkParentsFiltered(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("th a") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ParentsFiltered("tr").Length() } else { sel.ParentsFiltered("tr") } } b.Logf("ParentsFiltered=%d", n) } func BenchmarkParentsUntil(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("th a") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ParentsUntil("table").Length() } else { sel.ParentsUntil("table") } } b.Logf("ParentsUntil=%d", n) } func BenchmarkParentsUntilSelection(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("th a") sel2 := DocW().Find("#content") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ParentsUntilSelection(sel2).Length() } else { sel.ParentsUntilSelection(sel2) } } b.Logf("ParentsUntilSelection=%d", n) } func BenchmarkParentsUntilNodes(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("th a") sel2 := DocW().Find("#content") nodes := sel2.Nodes b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ParentsUntilNodes(nodes...).Length() } else { sel.ParentsUntilNodes(nodes...) } } b.Logf("ParentsUntilNodes=%d", n) } func BenchmarkParentsFilteredUntil(b *testing.B) { var n int b.StopTimer() sel := DocW().Find(".toclevel-1 a") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ParentsFilteredUntil(":nth-child(1)", "ul").Length() } else { sel.ParentsFilteredUntil(":nth-child(1)", "ul") } } b.Logf("ParentsFilteredUntil=%d", n) } func BenchmarkParentsFilteredUntilSelection(b *testing.B) { var n int b.StopTimer() sel := DocW().Find(".toclevel-1 a") sel2 := DocW().Find("ul") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ParentsFilteredUntilSelection(":nth-child(1)", sel2).Length() } else { sel.ParentsFilteredUntilSelection(":nth-child(1)", sel2) } } b.Logf("ParentsFilteredUntilSelection=%d", n) } func BenchmarkParentsFilteredUntilNodes(b *testing.B) { var n int b.StopTimer() sel := DocW().Find(".toclevel-1 a") sel2 := DocW().Find("ul") nodes := sel2.Nodes b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ParentsFilteredUntilNodes(":nth-child(1)", nodes...).Length() } else { sel.ParentsFilteredUntilNodes(":nth-child(1)", nodes...) } } b.Logf("ParentsFilteredUntilNodes=%d", n) } func BenchmarkSiblings(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("ul li:nth-child(1)") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.Siblings().Length() } else { sel.Siblings() } } b.Logf("Siblings=%d", n) } func BenchmarkSiblingsFiltered(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("ul li:nth-child(1)") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.SiblingsFiltered("[class]").Length() } else { sel.SiblingsFiltered("[class]") } } b.Logf("SiblingsFiltered=%d", n) } func BenchmarkNext(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:nth-child(1)") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.Next().Length() } else { sel.Next() } } b.Logf("Next=%d", n) } func BenchmarkNextFiltered(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:nth-child(1)") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.NextFiltered("[class]").Length() } else { sel.NextFiltered("[class]") } } b.Logf("NextFiltered=%d", n) } func BenchmarkNextAll(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:nth-child(3)") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.NextAll().Length() } else { sel.NextAll() } } b.Logf("NextAll=%d", n) } func BenchmarkNextAllFiltered(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:nth-child(3)") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.NextAllFiltered("[class]").Length() } else { sel.NextAllFiltered("[class]") } } b.Logf("NextAllFiltered=%d", n) } func BenchmarkPrev(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:last-child") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.Prev().Length() } else { sel.Prev() } } b.Logf("Prev=%d", n) } func BenchmarkPrevFiltered(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:last-child") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.PrevFiltered("[class]").Length() } else { sel.PrevFiltered("[class]") } } // There is one more Prev li with a class, compared to Next li with a class // (confirmed by looking at the HTML, this is ok) b.Logf("PrevFiltered=%d", n) } func BenchmarkPrevAll(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:nth-child(4)") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.PrevAll().Length() } else { sel.PrevAll() } } b.Logf("PrevAll=%d", n) } func BenchmarkPrevAllFiltered(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:nth-child(4)") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.PrevAllFiltered("[class]").Length() } else { sel.PrevAllFiltered("[class]") } } b.Logf("PrevAllFiltered=%d", n) } func BenchmarkNextUntil(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:first-child") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.NextUntil(":nth-child(4)").Length() } else { sel.NextUntil(":nth-child(4)") } } b.Logf("NextUntil=%d", n) } func BenchmarkNextUntilSelection(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") sel2 := DocW().Find("ul") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.NextUntilSelection(sel2).Length() } else { sel.NextUntilSelection(sel2) } } b.Logf("NextUntilSelection=%d", n) } func BenchmarkNextUntilNodes(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") sel2 := DocW().Find("p") nodes := sel2.Nodes b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.NextUntilNodes(nodes...).Length() } else { sel.NextUntilNodes(nodes...) } } b.Logf("NextUntilNodes=%d", n) } func BenchmarkPrevUntil(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("li:last-child") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.PrevUntil(":nth-child(4)").Length() } else { sel.PrevUntil(":nth-child(4)") } } b.Logf("PrevUntil=%d", n) } func BenchmarkPrevUntilSelection(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") sel2 := DocW().Find("ul") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.PrevUntilSelection(sel2).Length() } else { sel.PrevUntilSelection(sel2) } } b.Logf("PrevUntilSelection=%d", n) } func BenchmarkPrevUntilNodes(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") sel2 := DocW().Find("p") nodes := sel2.Nodes b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.PrevUntilNodes(nodes...).Length() } else { sel.PrevUntilNodes(nodes...) } } b.Logf("PrevUntilNodes=%d", n) } func BenchmarkNextFilteredUntil(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.NextFilteredUntil("p", "div").Length() } else { sel.NextFilteredUntil("p", "div") } } b.Logf("NextFilteredUntil=%d", n) } func BenchmarkNextFilteredUntilSelection(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") sel2 := DocW().Find("div") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.NextFilteredUntilSelection("p", sel2).Length() } else { sel.NextFilteredUntilSelection("p", sel2) } } b.Logf("NextFilteredUntilSelection=%d", n) } func BenchmarkNextFilteredUntilNodes(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") sel2 := DocW().Find("div") nodes := sel2.Nodes b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.NextFilteredUntilNodes("p", nodes...).Length() } else { sel.NextFilteredUntilNodes("p", nodes...) } } b.Logf("NextFilteredUntilNodes=%d", n) } func BenchmarkPrevFilteredUntil(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.PrevFilteredUntil("p", "div").Length() } else { sel.PrevFilteredUntil("p", "div") } } b.Logf("PrevFilteredUntil=%d", n) } func BenchmarkPrevFilteredUntilSelection(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") sel2 := DocW().Find("div") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.PrevFilteredUntilSelection("p", sel2).Length() } else { sel.PrevFilteredUntilSelection("p", sel2) } } b.Logf("PrevFilteredUntilSelection=%d", n) } func BenchmarkPrevFilteredUntilNodes(b *testing.B) { var n int b.StopTimer() sel := DocW().Find("h2") sel2 := DocW().Find("div") nodes := sel2.Nodes b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.PrevFilteredUntilNodes("p", nodes...).Length() } else { sel.PrevFilteredUntilNodes("p", nodes...) } } b.Logf("PrevFilteredUntilNodes=%d", n) } func BenchmarkClosest(b *testing.B) { var n int b.StopTimer() sel := Doc().Find(".container-fluid") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.Closest(".pvk-content").Length() } else { sel.Closest(".pvk-content") } } b.Logf("Closest=%d", n) } func BenchmarkClosestSelection(b *testing.B) { var n int b.StopTimer() sel := Doc().Find(".container-fluid") sel2 := Doc().Find(".pvk-content") b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ClosestSelection(sel2).Length() } else { sel.ClosestSelection(sel2) } } b.Logf("ClosestSelection=%d", n) } func BenchmarkClosestNodes(b *testing.B) { var n int b.StopTimer() sel := Doc().Find(".container-fluid") nodes := Doc().Find(".pvk-content").Nodes b.StartTimer() for i := 0; i < b.N; i++ { if n == 0 { n = sel.ClosestNodes(nodes...).Length() } else { sel.ClosestNodes(nodes...) } } b.Logf("ClosestNodes=%d", n) }