1.) Реализация автоматического завершения на стороне сервера, безусловно, будет иметь некоторые проблемы с эффективностью, особенно если вы говорите с бэкэндом при каждом событии нажатия клавиши. Но это можно улучшить, установив некоторые основные правила, такие как
a.) Вызывайте API только в том случае, если пользователь вводит более 2 слов. То же самое должно произойти, если пользователь вводит более 20 слов, вам не следует искать данные.
б.) Если вы знаете, какой король данных сохраняется, например, только числовой (не разрешать пользователю вводить алфавиты)
c.) Всегда ограничивайте данные при извлечении их из источника данных, чтобы гарантировать, что ограниченное число записей выбирается для отображения.
2.) Передача данных также будет работать только в том случае, если у вас ограниченный объем данных, скажем, несколько тысяч записей.
а.) Не пытайтесь получить все данные, если вы уже знаете, что данные будут огромными. Если вы упомянули, что пользователь может или не может использовать эту функцию, это будет ненужный вызов API.
б) Если данные ограничены, этот подход будет лучше, чем первый подход, поскольку раз и навсегда вы будете хранить данные на стороне клиента, и больше не будет ненужных обращений к серверу.