I've integrated ENS resolving into several projects now (both my own and as a contributor/collaborator), but found the standard approach of querying ENS contracts directly to be quite slow for most use cases, and can quickly eat up Alchemy/Infura node resources if you're not careful.
To help with this, I built an incredibly fast API (thanks to Cloudflare's edge caching) for resolving and reverse-resolving ENS names and addresses and avatars (30-50ms with a warm cache).
API docs are here: https://ensideas.com/about And open source code here: https://github.com/holic/ens-ideas
Examples:
This is already in use in the following projects and processing millions of ENS queries per month: