Bylines & blog posts
Whenever I write something—and write I will—I'll post it here. If I wrote an article for someone else, you'll see that publication's name under the title. Otherwise, it's just another one of my random blog posts.
In which I experiment with recompressing JPEGs to lossy WebP images, but while also mitigating quality loss with a fun new tool I wrote.
It's a new decade, and a new chance for a long overdue investment in my own well-being.
What we're willing to accept as our ethical responsibility as web developers will define what we stand for, and what we will not tolerate.
The usual pattern for differentially serving scripts is not without its risks. Here's an approach that might work a bit better for you.
In which I ask what the true meaning of productivity is when it comes to web development.
28 MarchA List Apart
In which I make the case that the web we build should be more boring to better benefit those who use what we make.
28 DecemberPerformance Calendar (2018)
Differential serving is a method by which we can ensure that we don't serve excessive ES6 transforms to browsers that don't need them, while serving those transforms to browsers that do. This article shows you how you can achieve this in a modern build toolchain.
22 OctoberGoogle Web Fundamentals
Client hints are a set of HTTP request headers we can use to change how we deliver page resources based on characteristics of a users device and network connection. In this article, you'll learn all about client hints, how they work, and a few ideas on how you can use them to make your site faster for users.
8 JuneGoogle Web Fundamentals
When we measure loading performance, we often do so using testing tools that only describe performance from the perspective of the tester. If we want to measure loading performance from the user's perspective, we must rely on the Navigation and Resource Timing APIs.
4 AprilGoogle Web Fundamentals
The Save-Data client hint request header available in Chrome, Opera, and Yandex browsers enables developers to deliver fast and light applications to users who have opted-in to 'data saving' mode in the browser.
20 MarchA List Apart
Image quality may be about striking the balance between speed and quality, but there's more to it than meets the eye. What if, despite having methods to develop better and better image experiences for the web, the user disagrees? In a quest to find answers, Jeremy Wagner takes us through an image quality study that he designs, develops, and iterates on with user feedback. Asking “Why?” is no easy undertaking in research. His lossy is your gain.
8 MarchGoogle Web Fundamentals
Thanks to mobile device and network proliferation, more people are using the web than ever before. As this user base grows, performance is more important than ever. In this article, find out why performance matters, and learn what you can do to make the web faster for everyone.
Continuing on from an earlier post on optimizing batches of images in bash, I show you how to do it even faster with xargs.
Content compression can be as simple as flipping a switch, but there's a lot to consider beyond that. We pretty well know what we need to compress, but what about configuring compression? Or static versus dynamic compression? Where does Brotli fit in with all of this?
10 AprilSmashing Magazine
The landscape for the performance-minded developer has changed significantly in the last year or so, with the emergence of HTTP/2 being perhaps the most significant of all. No longer is HTTP/2 a feature we pine for. It has arrived, and with it comes server push!
29 MarchDavid Walsh Blog
A little while ago Google released its Guetzli JPEG encoder, which claims a 20-30% improvement in file size over libjpeg. Being intrigued, I decided to give it a go. My tool of choice for optimizing JPEGs has long been jpeg-recompress, one of the binaries available in the jpeg-archive project. It's highly configurable, reasonably fast, and really delivers on optimizing JPEGs. But how does Guetzli compare?
Sometimes you need to optimize a whole lot of images at once. Learn how to do it offline with bash!
In this article you'll learn how to create a cache-aware HTTP/2 server push mechanism for using only a back end language and cookies.
5 OctoberSmashing Magazine
Chances are pretty good that you've worked with, or at least understand the concept of, server compression. By compressing website assets on the server prior to transferring them to the browser, we've been able to achieve substantial performance gains. In this article, learn how you can squeeze even more performance out of your website with Brotli.
† Indicates a co-written article.
‡ Indicates an article which has been deleted by the publisher, and that the link is to an archived version.