hugo/content/en/troubleshooting/build-performance.md

112 lines
4.1 KiB
Markdown
Raw Normal View History

---
title: Build Performance
linktitle: Build Performance
description: An overview of features used for diagnosing and improving performance issues in site builds.
date: 2017-03-12
publishdate: 2017-03-12
lastmod: 2017-03-12
keywords: [performance, build]
categories: [troubleshooting]
menu:
docs:
parent: "troubleshooting"
Squashed 'docs/' changes from f97826a17..1dc05a16b 1dc05a16b Update index.md d73a9b3b4 Added StackImpact showcase b0e82b3a5 Fix uglyURLs example cf8a93728 GA track outgoing sponsor clikcs aca59ac66 Move the sponsor banners up a little 5571673f0 Migrate from analytics.js to gtag.js 64a29b6cb Update faq.md 84704aa84 Use GOPATH variable if defined in installation from source 5f70e6ee2 Remove disableRSS etc. from the documentation 4945e7937 Remove superflous asterisks 39f6c9c28 showcase: Add 1password.com fe0f82610 Add GitLab warning 9f26f21d2 Fix URL typo 83a91fc99 Remove duplicate release notes 133cdd313 Release 0.36.1 fbe2a2dc7 Clean images 1b02f9193 Merge branch 'temp361' c430d2d58 Merge branch 'release-0.36.1' dd7370fc4 releaser: Prepare repository for 0.37-DEV 72534f9ec releaser: Add release notes to /docs for release of 0.36.1 845b2cacb releaser: Bump versions for release of 0.36.1 78790fcb1 Add fluid type to showcase details box 4ef59e008 Adjust column widths to handle a wider variety of copy width 6d2e68521 Always show the latest showcase item on front page 665b1eb5e showcase: Shuffle the news items 5fef1f9b7 Escape quote d680f0c16 Add some quotes 1722f0d5a showcase: Make the description more about Hugo a9d43db0a Add Quiply Employee Communications App 7aaa464ec Add Quiply Employee Communications App fad6a25dd maintenance: Show last 30 7afcfdced showcase: Set Linode date to today 0c31f481a New showcase for Linode 6c7687c2d Minor edits to the `apply` documentation 04bbff8b3 Update apply.md f543032e3 Fix clunky sentence 218ba2a65 Some more Netlify improvements 0bd512125 Improve the Netlify versioning docs 7a708d60e Clarify Netlify's Hugo versions handling 8f86342cd Add some space d68d4ff37 Remove now superflous warning bf93a46ea maintenance: Add TODO list 3b5f27835 maintenance: Remove a superflous prefix 8f29ba2fb maintenance: Adjust order 105d53610 maintenance: Add TOC 29e86396b maintenance: Fix page list selection ba51fe66d Finish the Maintenance section e9b0c710c Add latest changes in new spotlight section 8ccd79f61 Fix broken sentence c77643c37 Spelling 919f2faef Remove some old troubleshooting articles 09e467f06 Add a new FAQ ac2b25bb5 Hartwell showcase typos 5bf766993 Trim "www." from shocase URLs in title a180cd5cb Make the inline showcase template names unique 6886982fd Merge commit '9cc9bab46288d8d5f9fda7009c5f746258cec1b4' 09728efbf Add "target" and "rel" parameters to figure shortcode git-subtree-dir: docs git-subtree-split: 1dc05a16bd6b99809d97daeda743d914297f908c
2018-02-21 04:00:31 -05:00
weight: 3
slug:
aliases: []
toc: true
---
{{% note %}}
The example site used below is from https://github.com/gohugoio/hugo/tree/master/examples/blog
{{% /note %}}
## Template Metrics
Hugo is a very fast static site generator, but it is possible to write
inefficient templates. Hugo's *template metrics* feature is extremely helpful
in pinpointing which templates are executed most often and how long those
executions take **in terms of CPU time**.
| Metric Name | Description |
|---------------------|-------------|
| cumulative duration | The cumulative time spent executing a given template. |
| average duration | The average time spent executing a given template. |
| maximum duration | The maximum time a single execution took for a given template. |
| count | The number of times a template was executed. |
| template | The template name. |
```
▶ hugo --templateMetrics
Started building sites ...
Built site for language en:
0 draft content
0 future content
0 expired content
2 regular pages created
22 other pages created
0 non-page files copied
0 paginator pages created
4 tags created
3 categories created
total in 18 ms
Template Metrics:
cumulative average maximum
duration duration duration count template
---------- -------- -------- ----- --------
6.419663ms 583.605µs 994.374µs 11 _internal/_default/rss.xml
4.718511ms 1.572837ms 3.880742ms 3 indexes/category.html
4.642666ms 2.321333ms 3.282842ms 2 post/single.html
4.364445ms 396.767µs 2.451372ms 11 partials/header.html
2.346069ms 586.517µs 903.343µs 4 indexes/tag.html
2.330919ms 211.901µs 2.281342ms 11 partials/header.includes.html
1.238976ms 103.248µs 446.084µs 12 post/li.html
972.16µs 972.16µs 972.16µs 1 _internal/_default/sitemap.xml
953.597µs 953.597µs 953.597µs 1 index.html
822.263µs 822.263µs 822.263µs 1 indexes/post.html
567.498µs 51.59µs 112.205µs 11 partials/navbar.html
348.22µs 31.656µs 88.249µs 11 partials/meta.html
346.782µs 173.391µs 276.176µs 2 post/summary.html
235.184µs 21.38µs 124.383µs 11 partials/footer.copyright.html
132.003µs 12µs 117.999µs 11 partials/menu.html
72.547µs 6.595µs 63.764µs 11 partials/footer.html
```
{{% note %}}
**A Note About Parallelism**
Hugo builds pages in parallel where multiple pages are generated
simultaneously. Because of this parallelism, the sum of "cumulative duration"
values is usually greater than the actual time it takes to build a site.
{{% /note %}}
## Cached Partials
Some `partial` templates such as sidebars or menus are executed many times
during a site build. Depending on the content within the `partial` template and
the desired output, the template may benefit from caching to reduce the number
of executions. The [`partialCached`][partialCached] template function provides
caching capabilities for `partial` templates.
{{% tip %}}
Note that you can create cached variants of each `partial` by passing additional
parameters to `partialCached` beyond the initial context. See the
`partialCached` documentation for more details.
{{% /tip %}}
## Step Analysis
Hugo provides a means of seeing metrics about each step in the site build
process. We call that *Step Analysis*. The *step analysis* output shows the
total time per step, the cumulative time after each step (in parentheses),
the memory usage per step, and the total memory allocations per step.
To enable *step analysis*, use the `--stepAnalysis` option when running Hugo.
Squashed 'docs/' changes from a4fa0d1d6..81847981f 81847981f Add notes for installing "extended" Sass/SCSS version 02da3bb58 Include usage of disqus internal template 9b53380c4 Update sitemap-template.md f3417dd52 Update sitemap-template.md aae33d9a8 Update sitemap-template.md 834edc205 Release 0.45.1 fb93ab905 Merge branch 'temp451' 79f350906 releaser: Prepare repository for 0.46-DEV 25cd2352c releaser: Add release notes to /docs for release of 0.45.1 e60377c71 releaser: Bump versions for release of 0.45.1 873f6dce2 Update features.md ecc116642 Update link for Azure cb88c3185 Added .Site.Home to Site Variiables (#541) 975a88791 Document includePaths 56c4e332f Release Hugo 0.45 c22b25210 Merge branch 'temp45' 0ffad3ada releaser: Prepare repository for 0.46-DEV 08d494cc3 releaser: Add release notes to /docs for release of 0.45 ad546ba45 releaser: Bump versions for release of 0.45 971c46bb2 Fixed "Sratch" to become "Scratch" on line 44 a28255bf3 Clarify the meaning of .Pages vs .Site.Pages 127aeee09 docs: Update ref, relref, GetPage docs 350d674ec resources.Concat doesn't have an alias 1fd1219b0 docs: Document refLinksErrorLevel and refLinksNotFoundURL af2252ff6 Merge commit 'a3535c8486b2ce762b1a8a9c30b03985c3e02cee' a11486805 Merge commit 'b6b37a1f00f808f3c0d2715f65ca2d3091f36495' 1c8896cb1 Fix addkit link to account for i18n 468aef3fc releaser: Prepare repository for 0.45-DEV c6f4b97a2 releaser: Add release notes to /docs for release of 0.44 d3985afb7 releaser: Bump versions for release of 0.44 2c59a330c Adjust release notes 83966769a releaser: Prepare repository for 0.44-DEV e539613f7 releaser: Add release notes to /docs for release of 0.43 2bf648944 releaser: Bump versions for release of 0.43 d9d6e4bf7 Fix typos d6798afda Merge commit '98293eaa1570b5aff4452021c8b6d6c8560b3f06' 37cc52261 Add a newScratch template func 1f7f09613 Merge branch 'release-0.42.2' 857b0b26a releaser: Prepare repository for 0.43-DEV git-subtree-dir: docs git-subtree-split: 81847981f1f2cb1ebc83d42d275a2afb2bb22df1
2018-08-01 04:01:05 -04:00
[partialCached]:{{< ref "/functions/partialCached.md" >}}