date: 2020-01-23 title: "Improved base templates, and faster!" description: "In Hugo 0.63 we have improved the base template lookup logic, and this simplification also made Hugo faster …" categories: ["Releases"]
Note: There is already a patch release with some fixes.
0.63 is, in general, considerably faster and more memory effective (see the site-building benchmarks below comparing it to
v0.62). Not that we are particularly concerned about Hugo's build speed. We leave that to others. But we would hate if it got slower, so we have a comprehensive benchmark suite. And when we needed to simplify the template handling code to solve a concurrency issue, it also became more effective. And as a bonus, we also finally got the base template lookup order that you really, really wanted!
name old time/op new time/op delta SiteNew/Bundle_with_image-16 13.2ms ± 2% 10.7ms ± 0% -19.13% (p=0.029 n=4+4) SiteNew/Bundle_with_JSON_file-16 13.1ms ± 0% 10.8ms ± 0% -17.50% (p=0.029 n=4+4) SiteNew/Tags_and_categories-16 47.7ms ± 1% 43.7ms ± 2% -8.43% (p=0.029 n=4+4) SiteNew/Canonify_URLs-16 52.3ms ± 6% 49.5ms ± 7% ~ (p=0.200 n=4+4) SiteNew/Deep_content_tree-16 77.7ms ± 0% 71.6ms ± 1% -7.84% (p=0.029 n=4+4) SiteNew/Many_HTML_templates-16 44.0ms ± 2% 37.5ms ± 1% -14.79% (p=0.029 n=4+4) SiteNew/Page_collections-16 58.4ms ± 1% 52.5ms ± 1% -10.09% (p=0.029 n=4+4) name old alloc/op new alloc/op delta SiteNew/Bundle_with_image-16 3.81MB ± 0% 2.22MB ± 0% -41.57% (p=0.029 n=4+4) SiteNew/Bundle_with_JSON_file-16 3.60MB ± 0% 2.01MB ± 0% -44.09% (p=0.029 n=4+4) SiteNew/Tags_and_categories-16 19.3MB ± 1% 14.2MB ± 0% -26.52% (p=0.029 n=4+4) SiteNew/Canonify_URLs-16 70.7MB ± 0% 69.0MB ± 0% -2.30% (p=0.029 n=4+4) SiteNew/Deep_content_tree-16 37.0MB ± 0% 31.2MB ± 0% -15.78% (p=0.029 n=4+4) SiteNew/Many_HTML_templates-16 17.5MB ± 0% 10.6MB ± 0% -39.68% (p=0.029 n=4+4) SiteNew/Page_collections-16 25.8MB ± 0% 21.2MB ± 0% -17.80% (p=0.029 n=4+4) name old allocs/op new allocs/op delta SiteNew/Bundle_with_image-16 52.3k ± 0% 26.1k ± 0% -50.08% (p=0.029 n=4+4) SiteNew/Bundle_with_JSON_file-16 52.3k ± 0% 26.1k ± 0% -50.06% (p=0.029 n=4+4) SiteNew/Tags_and_categories-16 337k ± 1% 272k ± 0% -19.20% (p=0.029 n=4+4) SiteNew/Canonify_URLs-16 422k ± 0% 395k ± 0% -6.33% (p=0.029 n=4+4) SiteNew/Deep_content_tree-16 400k ± 0% 314k ± 0% -21.41% (p=0.029 n=4+4) SiteNew/Many_HTML_templates-16 247k ± 0% 143k ± 0% -41.84% (p=0.029 n=4+4) SiteNew/Page_collections-16 282k ± 0% 207k ± 0% -26.31% (p=0.029 n=4+4)
This release represents 35 contributions by 9 contributors to the main Hugo code base. @bep leads the Hugo development with a significant amount of contributions, but also a big shoutout to @hcwong, @flother, and @RemcodM for their ongoing contributions.
And a big thanks to @digitalcraftsman and @onedrawingperday for their relentless work on keeping the themes site in pristine condition and to @davidsneighbour and @kaushalmodi for all the great work on the documentation site.
Many have also been busy writing and fixing the documentation in hugoDocs, which has received 13 contributions by 10 contributors. A special thanks to @bep, @jeffscottlevine, @davidsneighbour, and @nicfits for their work on the documentation site.
Hugo now has:
.Typeon-page now returns an empty string if not set in the front matter or if
.Sectionreturns empty. See #6760.
- Baseof template (e.g.
baseof.html) lookup order is completely revised/expanded. See base template lookup order. We now do template resolution at execution time following the same rules as the template it applies to (e.g.
_default/single.html). This is an obvious improvement and your site should work as before.
- Shortcode params now supports params with raw string literals (strings surrounded with ``) that supports newlines.
- Note: In a base template (e.g.
baseof.html), the first template block must be a
- Rework template management to get rid of concurrency issues c6d650c8 @bep #6716#6760#6768#6778
- Put Go's internal template funcs in Hugo's map 1cf23541 @bep #6717
- Disable a test assertion on ARM 836c2426 @bep #6655
- Some more benchmark adjustments ddd75f21 @bep
- Adjust site benchmarks 4ed6ebef @bep
- Add a benchmark with lots of templates ea05c0e8 @bep
- Regen docs helper 4f466db6 @bep
- Allow multiple arguments in ne/ge/gt/le/lt functions Treat op arg1 arg2 arg3 ... as (arg1 op arg2) && (arg1 op arg3) and so on for ne/ge/gt/le/lt. 0c251be6 @le0tan #6619
- Update go-org 8585b388 @niklasfasching
- Add support for newline characters in raw string shortcode 21ca2e9c @hcwong
- Update github.com/alecthomas/chroma 3efa1d81 @ghislainbourgeois
- Update minify to v2.7.2 65ec8fe8 @bep #6756
- Update Goldmark to v1.1.21 d3e8ab2e @flother #6571
- Allow raw string literals in shortcode params da814556 @hcwong
- Update github.com/gohugoio/testmodBuilder 0c0bb372 @bep
- Update direct dependencies 94cfdf6b @bep #6719
- Update to new CSS config 45138017 @bep #6719
- Update to Minify v2.7.0 56354a63 @bep
- Add support for freebsd/arm64 aead8108 @dmgk #6719
- Update releasenotes_writer.go df6e9efd @bep
- Adjust auto ID space handling 9b6e6146 @bep #6710
- Document the new autoHeadingIDType setting d62ede8e @bep #6707#6616
- Regenerate docshelper 81b7e48a @bep #6707#6616
- Add an optional Blackfriday auto ID strategy 16e7c112 @bep #6707
- Make the autoID type config a string 8f071fc1 @bep #6707
- markup/goldmark: Simplify code 5ee1f087 @bep
- Make auto IDs GitHub compatible a82d2700 @bep #6616
- Support files in content mounts ff6253bc @bep #6684#6696
- Update alpine base image in Dockerfile to 3.11 aa4ccb8a @RemcodM
- Fix relative .Page.GetPage from bundle 196a9df5 @bep #6705
- Fix inline shortcode regression 5509954c @bep #6677