Speed up Jekyll site regeneration

· November 26, 2015

I’m a happy Jekyll user since about 1 year ago. Really nice experience so far and the auto-hosting on GitHub is just an added bonus that lifts the joy a little more.

The only thing is that I have 1017 posts on this blog. When I write the posts, locally, Jekyll rerenders all of them. That takes up to 50 seconds.

I feel the need. The need for more speed.

TL;DR

Use the --limit_posts switch to your jekyll serve command to significantly speed up re-generation and hence feedback.

Longer version

I’ve written before my post scaffolder which is a handy little script to get started. The other script I have made is a very simple script for starting my site locally. Here it is:

jekyll serve --watch

This just starts my blog locally and watch all folders for changes. If a change is found the entire site is regenerated. A normal editing round might look like this:

$ ./start_local 
Configuration file: /Users/marcus/Projects/blog/_config.yml
            Source: /Users/marcus/Projects/blog
       Destination: /Users/marcus/Projects/blog/_site
      Generating... 
                    done.
Auto-regeneration: enabled for '/Users/marcus/Projects/blog'
Configuration file: /Users/marcus/Projects/blog/_config.yml
Server address: http://127.0.0.1:4000/
Server running... press ctrl-c to stop.
    Regenerating: 1 file(s) changed at 2015-11-26 09:43:32 ...done in 48.513174 seconds.
    Regenerating: 1 file(s) changed at 2015-11-26 09:44:20 ...done in 43.576925 seconds.
    Regenerating: 1 file(s) changed at 2015-11-26 09:46:13 ...done in 45.518559 seconds.

That’s too slow, since I in this stage of editing mainly fix layout and typos.

But today I saw a switch called --limit_posts and gave it a try with only the last 1 post regenerated. Sure enough the time dropped significantly, almost instant feedback. Awesomery!

Here’s my new command

jekyll serve --watch --limit_posts 1

And now when I save I get times like these:

Regenerating: 1 file(s) changed at 2015-11-26 10:06:44 ...done in 1.745348 seconds.
Regenerating: 1 file(s) changed at 2015-11-26 10:07:09 ...done in 1.845595 seconds.
Regenerating: 1 file(s) changed at 2015-11-26 10:07:41 ...done in 1.764797 seconds.
Regenerating: 1 file(s) changed at 2015-11-26 10:07:52 ...done in 1.793467 seconds.
Regenerating: 1 file(s) changed at 2015-11-26 10:08:02 ...done in 1.735383 seconds.

A much more workable solution. Fast feedback is key for a good writing flow. Note that this only happens on my local development machine. Once I push it to GitHub I presume an full site regeneration happens.

NOTE The obvious drawback is that only the last 1 posts is generated. Are you editing all post you need to regenerate the whole thing.

I’m now looking into adding some kind of auto-refresh of the browser too. Post that later.

Twitter, Facebook