Netlify

A popular way to use Netlify's web hosting service is by linking your site to a Github repository and  building the pages with a static site generator. that retrieved content from a CMS, uploaded the html files to Github which were then automatically transferred to Netlify and uploaded to its CDN.

Websites with about a dozen pages would take about a minute to be deployed and I was perfectly happy, knowing that this was a very common approach. However, it soon became obvious that changing the content of a single page still required all pages to be processed - it was only after all the processed files arrived at Netlify that any optimisation would take place - i.e. only then that pages with actual changed content would be deployed to the CDN.

+-----+         +----------+         +--------+         +---------+         +-----+
| CMS |-------->| ELEVENTY |-------->| GITHUB |-------->| NETLIFY |-------->| CDN |
+-----+         +----------+         +--------+         +---------+         +-----+

Waiting for 1 minute is an eternity when you've only changed one blog post, for example. If your website has already published 100 blogs why should you have to wait for all of them to be downloaded / converted / transferred before the 1 that you added gets uploaded to your website?

There are a few different ways you can deploy your site with Netlify - you can drag and drop a folder of assets, you can link your Netlify account to your Github repository and do something like the above or you can do it yourself using Netlify's APIs.

The shortest path to deployment nirvana is by deploying directly from the CMS to Netlify, which is how we now do it in our CMS application. Instead of waiting 60 seconds to deploy a dozen pages, we wait a few seconds. If we add a new blog post we wait perhaps 2 seconds for the deployment to complete.

Best of all, we can deploy say, a 100 page website on Netlify's sub-domain - check it looks good - and then deploy the same content on our custom domain which takes literally no more than a few seconds to determine that ALL of the content has ALREADY been uploaded.

+-----+         +---------+         +-----+
| CMS |-------->| NETLIFY |-------->| CDN |
+-----+         +---------+         +-----+

By calling Netlify's APIs within our deployment process we send Netlify the hash values of each of our pages, Netlify responds telling us those it requires - i.e. haven't already been uploaded - so we can finally upload to Netlify's CDN only our changed content. 

All API calls made by the CMS are listed in the “Technical Log”.

The process could be optimised even more if we identified in the CMS which page content has changed since the last deployment - we would have to maintain the computed hash values of each page in the database - that way we would only have to compute the hash value of pages that have actually changed.

If people want to deploy large 100+ page sites, then we will look to optimise the process but for now waiting a couple of seconds instead of a minute is already a major benefit.