mirror of
https://github.com/gohugoio/hugo.git
synced 2025-03-19 14:12:54 +00:00
hugolib: Speed up GetPage
When we know to look into the index pages collection, do that: ``` benchmark old ns/op new ns/op delta BenchmarkGetPage-4 51483 7072 -86.26% benchmark old allocs new allocs delta BenchmarkGetPage-4 71 71 +0.00% benchmark old bytes new bytes delta BenchmarkGetPage-4 2648 2648 +0.00% ``` This commit also returns an error if .Site.GetPage is called with the regular Page Kind, as that is currently not supported. Fixes #3503
This commit is contained in:
parent
6c560288a6
commit
fbb78b89df
2 changed files with 21 additions and 4 deletions
|
@ -51,8 +51,8 @@ func newPageCollectionsFromPages(pages Pages) *PageCollections {
|
||||||
return &PageCollections{rawAllPages: pages}
|
return &PageCollections{rawAllPages: pages}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PageCollections) getPage(typ string, path ...string) *Page {
|
func (c *PageCollections) getFirstPageMatchIn(ps Pages, typ string, path ...string) *Page {
|
||||||
pages := c.findPagesByKindIn(typ, c.Pages)
|
pages := c.findPagesByKindIn(typ, ps)
|
||||||
|
|
||||||
if len(pages) == 0 {
|
if len(pages) == 0 {
|
||||||
return nil
|
return nil
|
||||||
|
@ -78,6 +78,20 @@ func (c *PageCollections) getPage(typ string, path ...string) *Page {
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PageCollections) getPage(typ string, path ...string) *Page {
|
||||||
|
var pages Pages
|
||||||
|
|
||||||
|
if typ == KindPage {
|
||||||
|
pages = c.RegularPages
|
||||||
|
} else {
|
||||||
|
pages = c.indexPages
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.getFirstPageMatchIn(pages, typ, path...)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*PageCollections) findPagesByKindIn(kind string, inPages Pages) Pages {
|
func (*PageCollections) findPagesByKindIn(kind string, inPages Pages) Pages {
|
||||||
|
|
|
@ -1906,8 +1906,11 @@ func (s *Site) Stats() {
|
||||||
// This will return nil when no page could be found.
|
// This will return nil when no page could be found.
|
||||||
//
|
//
|
||||||
// The valid page types are: home, section, taxonomy and taxonomyTerm
|
// The valid page types are: home, section, taxonomy and taxonomyTerm
|
||||||
func (s *SiteInfo) GetPage(typ string, path ...string) *Page {
|
func (s *SiteInfo) GetPage(typ string, path ...string) (*Page, error) {
|
||||||
return s.getPage(typ, path...)
|
if typ == KindPage {
|
||||||
|
return nil, errors.New("GetPage not supported for regular pages")
|
||||||
|
}
|
||||||
|
return s.getPage(typ, path...), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Site) permalinkForOutputFormat(link string, f output.Format) (string, error) {
|
func (s *Site) permalinkForOutputFormat(link string, f output.Format) (string, error) {
|
||||||
|
|
Loading…
Reference in a new issue