Dataloaders replace N+1 with E queries (where E is the number of separate entity types to fetch) and an in-memory merging of all datasets (huge if you're not careful).
They are a solution, but not necessarily a good one. And GraphQL doesn't lend itself to goos solutions.