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" >}}