Currently we load suggestions in full - while the user waits - if there are up to 300 possible tags to choose from. If there are more than 300 possible tags, then suggestion list loading is performed asynchronously via a 300ms setTimeout. This has two downsides; the user has to wait and it's all very hardcoded, baked-in logic.
A better way to do this would be to always load the first 20 or 30 items, followed by a loading div in case the user ever reaches it by scrolling. We could then continue loading items asynchronously into the list and eventually remove the loading div.
If the user starts typing to filter, we should just cancel our processing at whatever point it got to.