JPEG image file sizes are highly variable — even when generated with the same settings, no two images are likely to generate files of the same size (though they could be close). Two different images with the same dimensions will generate files of different sizes — often drastically different.
JPEG files have two components that we care about: the image data and the EXIF meta data.
The size of the image data is driven by three factors — the image pixel dimensions, the Q (“quality”) setting and the image contents. Smaller image sizes will produce smaller files and lower Q settings generate smaller files, but the impact of the image contents is highly variable.
Too low a Q setting will result in visible image artefacts — most obviously banding/ posterization in areas with smooth gradients or blocking when the setting is really low.
Too high a Q setting will just generate large, bloated files with no visible benefit.
On top of the image data, the EXIF segment of JPEG files can also be bloated with XMP metadata (especially from LR which can save all the parametric edit information to the file).
PPI doesn’t matter:
The output PPI setting is irrelevant — unless you’re generating your JPEGs by setting physical dimensions in which case the dimensions and the PPI setting determine the pixel sizes (and it’s the pixel sizes that count, not the PPI setting — 1000px at 72ppi is the same 1000px set at 300ppi).
As an example (I use Lightroom), a 21MP image might generate a 10.4MB JPEG at a quality setting of 100%, 6.1MB at 90% and 3.5MB at 80% Taking it a little bit further, I get 2.3MB at 70% and 1.6MB at 65%. Unless the image has smooth tonal gradients exhibiting banding/ posterization, the 2.33MB/70% JPEG is probably good for a 20” print (if I’m printing bigger than 20” the source image gets a lot more scrutiny before I commit ink to paper).
Limiting that same image to a maximum dimension of 1900 pixels and setting JPEG quality to 60 generates a 220kb file — that’s big enough to fill most screens at 1:1 and the quality is generally fine for on-screen viewing (the artefacts are obvious if it isn’t — look for banding in any smooth gradients in tone).
Unfortunately for me, many of my images have smooth tonal gradients — while I’d love to upload with a lower Q setting, I tend to use 80% across the board. Most online services will resize and recompress as part of their content delivery.
For lab prints, I tend to use 90% when generating JPEGs from Lightroom (and don’t resize). The output file sizes vary dramatically — I could be ordering a 10” print from a 5MB file or a 40” print from a 3MB file — the file size simply isn’t something to worry about.