hugolib: Speed up GetPage - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit fbb78b89df8ccef8f0ab26af00aa45d35c1ee2cf
 (DIR) parent 6c560288a6329305ae3327a589e072e56bc9970d
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Tue, 23 May 2017 01:20:31 +0300
       
       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
       
       Diffstat:
         M hugolib/page_collections.go         |      18 ++++++++++++++++--
         M hugolib/site.go                     |       7 +++++--
       
       2 files changed, 21 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/hugolib/page_collections.go b/hugolib/page_collections.go
       @@ -51,8 +51,8 @@ func newPageCollectionsFromPages(pages Pages) *PageCollections {
                return &PageCollections{rawAllPages: pages}
        }
        
       -func (c *PageCollections) getPage(typ string, path ...string) *Page {
       -        pages := c.findPagesByKindIn(typ, c.Pages)
       +func (c *PageCollections) getFirstPageMatchIn(ps Pages, typ string, path ...string) *Page {
       +        pages := c.findPagesByKindIn(typ, ps)
        
                if len(pages) == 0 {
                        return nil
       @@ -78,6 +78,20 @@ func (c *PageCollections) getPage(typ string, path ...string) *Page {
                }
        
                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 {
 (DIR) diff --git a/hugolib/site.go b/hugolib/site.go
       @@ -1906,8 +1906,11 @@ func (s *Site) Stats() {
        // This will return nil when no page could be found.
        //
        // The valid page types are: home, section, taxonomy and taxonomyTerm
       -func (s *SiteInfo) GetPage(typ string, path ...string) *Page {
       -        return s.getPage(typ, path...)
       +func (s *SiteInfo) GetPage(typ string, path ...string) (*Page, error) {
       +        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) {