build-performance.md (3844B)
1 ---
2 title: Build Performance
3 linktitle: Build Performance
4 description: An overview of features used for diagnosing and improving performance issues in site builds.
5 date: 2017-03-12
6 publishdate: 2017-03-12
7 lastmod: 2017-03-12
8 keywords: [performance, build]
9 categories: [troubleshooting]
10 menu:
11 docs:
12 parent: "troubleshooting"
13 weight: 3
14 slug:
15 aliases: []
16 toc: true
17 ---
18
19 {{% note %}}
20 The example site used below is from https://github.com/gohugoio/hugo/tree/master/examples/blog
21 {{% /note %}}
22
23 ## Template Metrics
24
25 Hugo is a very fast static site generator, but it is possible to write
26 inefficient templates. Hugo's *template metrics* feature is extremely helpful
27 in pinpointing which templates are executed most often and how long those
28 executions take **in terms of CPU time**.
29
30 | Metric Name | Description |
31 |---------------------|-------------|
32 | cumulative duration | The cumulative time spent executing a given template. |
33 | average duration | The average time spent executing a given template. |
34 | maximum duration | The maximum time a single execution took for a given template. |
35 | count | The number of times a template was executed. |
36 | template | The template name. |
37
38 ```
39 ▶ hugo --templateMetrics
40 Started building sites ...
41
42 Built site for language en:
43 0 draft content
44 0 future content
45 0 expired content
46 2 regular pages created
47 22 other pages created
48 0 non-page files copied
49 0 paginator pages created
50 4 tags created
51 3 categories created
52 total in 18 ms
53
54 Template Metrics:
55
56 cumulative average maximum
57 duration duration duration count template
58 ---------- -------- -------- ----- --------
59 6.419663ms 583.605µs 994.374µs 11 _internal/_default/rss.xml
60 4.718511ms 1.572837ms 3.880742ms 3 indexes/category.html
61 4.642666ms 2.321333ms 3.282842ms 2 posts/single.html
62 4.364445ms 396.767µs 2.451372ms 11 partials/header.html
63 2.346069ms 586.517µs 903.343µs 4 indexes/tag.html
64 2.330919ms 211.901µs 2.281342ms 11 partials/header.includes.html
65 1.238976ms 103.248µs 446.084µs 12 posts/li.html
66 972.16µs 972.16µs 972.16µs 1 _internal/_default/sitemap.xml
67 953.597µs 953.597µs 953.597µs 1 index.html
68 822.263µs 822.263µs 822.263µs 1 indexes/post.html
69 567.498µs 51.59µs 112.205µs 11 partials/navbar.html
70 348.22µs 31.656µs 88.249µs 11 partials/meta.html
71 346.782µs 173.391µs 276.176µs 2 posts/summary.html
72 235.184µs 21.38µs 124.383µs 11 partials/footer.copyright.html
73 132.003µs 12µs 117.999µs 11 partials/menu.html
74 72.547µs 6.595µs 63.764µs 11 partials/footer.html
75 ```
76
77 {{% note %}}
78 **A Note About Parallelism**
79
80 Hugo builds pages in parallel where multiple pages are generated
81 simultaneously. Because of this parallelism, the sum of "cumulative duration"
82 values is usually greater than the actual time it takes to build a site.
83 {{% /note %}}
84
85
86 ## Cached Partials
87
88 Some `partial` templates such as sidebars or menus are executed many times
89 during a site build. Depending on the content within the `partial` template and
90 the desired output, the template may benefit from caching to reduce the number
91 of executions. The [`partialCached`][partialCached] template function provides
92 caching capabilities for `partial` templates.
93
94 {{% tip %}}
95 Note that you can create cached variants of each `partial` by passing additional
96 parameters to `partialCached` beyond the initial context. See the
97 `partialCached` documentation for more details.
98 {{% /tip %}}
99
100
101 [partialCached]:{{< ref "/functions/partialCached.md" >}}