Problem, I have many instances, up to 7, of a select box appearing on one page. This select box has roughly 800 items to chose from (it's an emoji picker). I say up to 7 because each instance is added dynamically. The user can create an entity, and with the new entity a form is generated, and then the user can enter or select various options, including an emoji. Currently each time an entity is created a fetch request is made to the server to get the list of emojis, and select box is created from the response. In production that request would be cached.
A list of 800 options is not great for UX. Obviously not all emojis are relevant to the page, so I suspect that a few will be used more often than others. Ideally I would like to order the list from most often used to least used. Or most recent to never used. This would require some kind of feedback loop with the server.
Now updating 7 option lists of 800+ items each time an emoji is selected is no small task.
My idea is to store the list of emojis in memory, likely with the initial page load. Then take the first 30 or so items of the list and display these in the select boxes, with a show more option. Then each time an emoji is selected the list in memory is updated pushing the selected emoji to the top of the list. If the user selects the show more option and chooses an emoji not in the top 30 then that one is pushed to the top of the list. Existing instance are not updated, and new instance will be generated with the new order. Then once the user successfully completes to "goal" and interacts with the server, the top items of the list are sent back to the server where the initial list is updated accordingly.
Any thoughts?
The one issue I see with this approach is that the next user sees the last user's selection. If a user or multiple user or one user over multiple sessions decide's to use only what can be perceived as offensive emojis (eg: eggplant, peach, etc..) then a new user may get a bad impression of the website. So maybe some kind of weighted approach might be necessary. Note that users do not need to be logged in, so saving a list for each user is not a solution.
I'm looking for ideas.