Compression: what to compress and what not to Text compresses by two thirds. Images do not compress at all, and compressing them wastes CPU on every request. 4 min read Cache headers that are safe to set A long cache on a file whose name never changes is a file you cannot update. Version the name, then cache it forever. 5 min read HTTP/2 and HTTP/3 - what actually changes Many small files stop being a problem, which makes some old advice actively wrong. 4 min read Images that are heavier than the whole page Usually most of the bytes and the easiest thing to halve. Three changes, in the order of what they save. 5 min read The page that runs four hundred queries Each one is fast. Together they are the page. How to see the count, and the one change that collapses it. 5 min read opcache: what it caches and what it does not The single largest PHP speed-up, what it will not fix, and the setting that makes a deploy look like it did not happen. 4 min read Sizing a PHP-FPM pool max_children copied from a tutorial is the most common cause of a server that swaps. Work it out from your own numbers instead. 5 min read Reading a network waterfall The shape of the chart names the problem before you read a single row. Four shapes and what each one means. 5 min read Object caching with Redis It removes repeated database work, not slow queries. When it helps a great deal, when it helps nothing, and the setting that makes it dangerous. 5 min read The site is slow - where to look first Measure before you change anything. One number tells you whether the problem is the server, the network or your own code. 6 min read TTFB: the one number worth measuring first It splits every slow-page problem in half before you change anything, and it is one command. 4 min read