Eight hundred milliseconds is fine for a documentation site. It is long enough, on the floor, for someone to decide the app is thinking too hard and to walk away.
The comparison is not Google. The comparison is a barcode beep. You will not beat a beep. You can get close enough that the extra time is clearly buying identity you could not scan.
Budget the pipeline
Capture, compress, upload, preprocess, match, query location, render. I put timings on each step because "the model is slow" is often "we uploaded a 12 megapixel JPEG over weak Wi-Fi."
I shrink on device first. I show a skeleton of last-used cards. I do not wait for pretty animations.
Perceived speed is a UI problem too
A freeze feels slower than a progress state that already shows "finding location." Lying with a fake progress bar will get you caught. Honest phases will not.