Home

Identify Liquid Bottlenecks by Profile Jekyll Builds

It's easy to let Liquid templates get away and bog down build times. Here's a quick way to find out which templates are the culprits.

The Liquid templating language is made to be flexible through the use of filters, includes, and assigns. When working with a Jekyll project, especially one using dynamic data, that flexibility becomes the key factor in being able to scale the site while keep code DRY.

But using liquid filters, includes, and assigns can quickly get out of hand and bog down your build times, making it difficult to scale your site.

Fortunately, there's a really great (and simple) way to figure out which templates are the problem. You can do this by profiling your build while it's running. Simply pass the --profile argument to the command and take a look at the output.

$ bundle exec jekyll build --profile

That should lead to something like this:

Filename                             | Count |    Bytes |  Time
-------------------------------------+-------+----------+------
_layouts/default.html                |   234 | 5046.84K | 4.897
_includes/_head.html                 |   238 |  870.35K | 3.813
_includes/_footer-script.html        |   238 |   34.63K | 0.845
_layouts/song.html                   |    30 |  405.89K | 0.292
_layouts/video.html                  |    25 |  281.09K | 0.291
_layouts/article.html                |    38 |  348.48K | 0.263
_layouts/tag.html                    |    72 |  230.42K | 0.232
_includes/_video-card.html           |    37 |  164.96K | 0.137
_includes/_article-card.html         |    47 |  153.30K | 0.136
_includes/_tabs.html                 |    57 |   64.73K | 0.115
_includes/_media-label.html          |   152 |  134.77K | 0.106
_includes/_tags_list.html            |   104 |   23.54K | 0.102
_layouts/author.html                 |    13 |   80.32K | 0.100
...

In this example, we can see the first three files take significantly longer to build than the rest. While that may be because they're being used frequently and not because they are inefficient, it at least provides a path forward on where to spend time optimizing the site.

Let's Connect

Keep Reading

Access the Site Object within a Jekyll Filter

Filters are the way to make liquid work for you, but sometimes we want more context than we are given when running them.

Aug 21, 2018

Dynamic Attributes on Instances in Ruby

Although it's not usually the right choice, when you want to create individual attribute behavior on instances, Ruby has your back.

May 01, 2018

Inherited Class-Level Utilities in Ruby

The difference between Ruby's class and class instance variables, and how you can use them to abstract functionality from inherited classes.

Jan 14, 2017