Blog

How To Install WordPress on DigitalOcean with Sail

Sail is a great and much more affordable alternative to traditional and managed WordPress hosting. It’s a free and open source CLI tool to provision and manage WordPress applications in the DigitalOcean cloud. Sail logo While the 1-click WordPress installer does the job for many DigitalOcean users, it’s very limited for power-users and developers. Sail CLI fills this gap, providing a...

Sail Premium is Here + Giveaway

Hey folks, hope you’re having a great 2022 so far! I’ve been working on some premium features for Sail CLI over the past few weeks and I would love for you to try them out.

Surge: A simple Page Caching Plugin for WordPress

Meet Surge, a brand new page caching plugin for WordPress. It’s extremely fast and has no configuration screens. There is no learning curve, the plugin works just by activating it. Surge stores cache files on the filesystem, leveraging the Linux kernel page cache for efficient in-memory caching and invalidation. In various load tests, Surge has shown to easily handle 1000-2500 requests per...

PHP Benchmark: include() vs file_get_contents()

TLDR: include() can be significantly faster than file_get_contents(), if certain conditions are met. I’m building a simple page caching plugin to ship with Sail CLI for WordPress. I’ve already decided that the filesystem is going to be the primary storage method and ran some benchmarks against Redis and Memcached, the results were satisfying. However, even with just the filesystem...

Redis vs Memcached vs file_get_contents

I read articles about web performance and scaling almost every day, and when it comes to caching, the vast majority of them promote tools like Redis and Memcached, which are really fast, in-memory key-value stores. Their performance metrics, the requests per second, how easy it is to scale them and all their great features, will often overshadow the fact that these are services designed to run on...

Page Caching on the Filesystem

A few months ago I set out to build a page caching plugin for WordPress from scratch and streamed it live. The result was a simple filesystem-based advanced-cache.php implementation. It was nowhere near perfect, but it worked. It worked so well, that I decided to put some more effort into it, and I’m happy to report that it’s been running successfully on some production sites...

Sender header with wp_mail()

I was playing around with my Postfix configuration, trying to get a setup working with multiple different domains. My goal was to be able to use a different relay host and authentication, based on the sender’s address in the message. This turned out to be quite a simple solution — there’s a Postfix configuration setting called sender_dependent_relayhost_maps, which does exactly...

Cache Invalidation with Flags

Cache invalidation is hard, proven times and times by the “clear cache” and “delete all caches” buttons in various caching plugins and hosting control panels. While some of the concepts in this post are applicable to various types of caching, I’ll stick to page caching for simplicity, and of course WordPress.

WordPress Performance Profiling with Sail CLI

Having to deal with performance problems on a WordPress site is never too pleasant, partly because the tooling is not great. Things like Query Monitor and the Debug Bar series of plugins can certainly help to some extent, but often times they’re not enough, because they do things in PHP, which is limited to, well… PHP. Moreover, when reporting on database queries or remote HTTP...