Static Site Generator performance considerations
When you start building large documentation sites, or gluing together multiple documentation sets, you might look for performance gains in the build time. Having smaller doc sites helps with this, so that you can build with your static site generator systems in parallel, but also look for incremental builds or ways to measure build times to look for areas where the build is slowed down and then find a root cause for the slower performance.
Sphinx build performance options
Sphinx has a couple of possibilities for decreasing build times and increasing efficiency of builds.
Sphinx is configured by default to rebuild only new and changed files, rather than building the entire site over again. Use the -a
flag on the sphinx-build
command to always write all output files. This setting may help you measure benchmark values for build times.
Trying to keep your number of individual RST files to build to hundreds rather than thousands will naturally make the builds take less time. If you do need thousands of documents, then also be careful with the number of toctree
directives in use as that overhead can slow down builds.
One option for large doc sets is to let Sphinx use multiple processes, adjusting on its own with the sphinx-build -j auto
setting, available since the 1.7 release. The auto
value causes Sphinx to use the number of CPUs for the number of parallel builds.
Jekyll build time improvements
Jekyll can build only changed files with the incremental build feature, but it is considered experimental in the Jekyll 3.0 release. Use the -I
or --incremental
flag on your jekyll build
or jekyll serve
commands any time you want to re-build only posts and pages with changes.
$ jekyll build --incremental
For sites with about a hundred pages, there’s less need for performance helpers, but when the site grows to 1,000 pages or more, you should consider only building changed files with the --incremental
flag.
Hugo build performance metrics
For Hugo, often the build is so fast you don’t have to worry about building incremental changes. That said, Hugo does provide ways to benchmark the site build and to look for metrics for the templates themselves, because it is possible to slow down the build with inefficient template executions. When you run a hugo
command, you can also use these flags to learn more about build performance:
* --stepAnalysis
- Display memory and timing of different steps of the program.
* --templateMetrics
- Display metrics about template executions.
* --templateMetricsHints
- Calculate some improvement hints when combined with –templateMetrics.
There’s also the benchmark command, documented on the gohugo.io site. The command builds the site multiple times with various flags set, and analyzes the running process to provide a benchmark for comparison either over time or with various flags set, such as including expired content.