I think this is due to filling the otu lookup via paginated results (50) whereas sample otu requests get as many ids as corresponds to a query (can include more than the 50 otus stored).
Need to populate otu lookup table using sample otu requests I think.
Loading all the missing otu names after comparing with the existing lookup entries means the program goes back to being less scalable -- especially on broad searches (e.g. k_bacteria).
Could generate popup content upon click on a cell, that would then mean there's a request to the server which would add a bit of latency to every cell click (a possibly common action).