Firebase Storage is not a CDN so it may take a while if your bucket is located too far from you. I'm not sure sure about size of your 640x480
image but 1-2 seconds sounds pretty okayish. I tried downloading an image of 219,457 bytes
first from my local computer and then from a VM instance (which has over 4000 Mbps
download speed). It took just 0.5 seconds
for the VM to download it (same region where the bucket is) but took my computer anywhere between 2-4 seconds
.
Will hosting the app on firebase hosting solve this issue? I see firebase hosting distributes it to a global cdn
Firebase storage and hosting are 2 separate services. Hosting serves the website resources such as HTML, JS or any static file that you deploy using firebase deploy --only hosting
command over CDN.
The best option would be to use a CDN with Firebase Storage. You can setup Google Cloud CDN with Storage bucket. I just compared download times from Firebase storage with and without CDN and here's the difference:
Without CDN:

With CDN:

Additionally, your CDN provider may keep serving cached version even if you have deleted images from Firebase storage so makes sure the provider has some sort of API to clear specific files from cache.
Edit:
Once the image is cached on edge, anyone will be able to access it without the ?token=
parameter which defeats the purpose of having it and the security rules. Even though security rules just prevent random users from fetching the download URLs and not accessing the images if authorized users shared it with others, this may not be ideal in some cases.
One way around would be to use those tokens (UUID) as the image name (e.g. img_9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d.png
) but you cannot revoke these unless you reupload the image (to rename the image with new token).