- Stable
3.0.0
- Canary
3.0.1-alpha.5
Menu
1.93s
29.05s
Performance
Eleventy by default will warn you if certain pieces of your build take longer than 8% of your total build time. This list includes:
- Filters/Helpers/11ty.js JavaScript Functions
- Shortcodes
- Data Files
- Resolving
--watch
Dependencies (not subject to the 8% rule—these only show if longer than500ms
as watch tasks are not counted as part of the traditional build time)
This list is not considered to be exhaustive. It’s just what has been implemented thus far!
Show All Performance Measurements
Jump to section titled: Show All Performance MeasurementsYou can use the following debug
command to show performance measurements for all of these entries (not just those that take longer than 8%).
Learn more about environment variables for debug output.
macOS or Linux (et al)
Jump to section titled: macOS or Linux (et al)DEBUG=Eleventy:Benchmark* npx @11ty/eleventy
Windows
Jump to section titled: Windowsset DEBUG=Eleventy:Benchmark* & npx @11ty/eleventy
Aggregate Benchmarks
Jump to section titled: Aggregate BenchmarksWe also have a special category of aggregate benchmarks to do higher level analysis. Look for entries like:
Benchmark (Aggregate): Searching the file system took 40ms (0.5%, called 2×, 19.9ms each) +0ms
Benchmark (Aggregate): Data File took 134ms (1.8%, called 405×, 0.3ms each) +0ms
Benchmark (Aggregate): Template Read took 682ms (9.0%, called 600×, 1.1ms each) +0ms
Benchmark (Aggregate): Passthrough Copy File took 924ms (12.2%, called 669×, 1.4ms each) +0ms
Benchmark (Aggregate): Template Compile took 366ms (4.8%, called 1526×, 0.2ms each) +0ms
Benchmark (Aggregate): Template Render took 1215ms (16.1%, called 949×, 1.3ms each) +0ms
Benchmark (Aggregate): Template Write took 2088ms (27.6%, called 312×, 6.7ms each) +0ms
Note that while we do make every attempt to make these as accurate as possible, the percentages for these entries may be greater than 100% due to the asynchronous nature of these tasks (passthrough copy especially).
Node.js Profiling
Jump to section titled: Node.js ProfilingThe most reliable mechanism for tracking down performance issues in any Node.js based code is to use Node’s built-in CPU Profiling feature (Node v12+). You can run Node with the --cpu-prof
argument and point to the Eleventy bin like so (noting that --quiet
is an Eleventy CLI argument and you can add any others there too):
# Instead of:
# npx @11ty/eleventy --quiet
# Use this:
node --cpu-prof ./node_modules/.bin/eleventy --quiet
This will write a CPU.***.cpuprofile
file to the same directory.
SpeedScope is a great web site that will help you look at a visual representation of this data, with a special nod to the Left Heavy
and Sandwich
visuals!