Articles in this topic
Pick a width ladder from real layout sizes, generate each variant with Sharp after upload, never upscale, and emit srcset and sizes from one record.
Read article →Compute a BlurHash string and a tiny LQIP while processing an upload, store them with the asset, and paint them in reserved space until the image loads.
Read article →Resize uploaded images at the edge on first request with cf.image options, a signed or allow-listed parameter set, and caching so each variant is made once.
Read article →Calibrate encoder quality per format against a perceptual metric on your own uploads, instead of copying numbers — then pin the settings and re-check them.
Read article →Serve AVIF, WebP or JPEG from one image URL by reading the Accept header at the edge, with a normalised cache key and Vary so caches never mix formats.
Read article →