É melhor enviar todos os dados para o cliente ou servidor de consulta para cada pesquisa?

5

Eu tenho uma função de busca no meu site que precisa pesquisar através de ~ 2000 itens (esta tabela nunca muda, sempre terá o mesmo número de itens) armazenados no MySQL. Tudo o que precisa fazer é pesquisar por nome ou "LIKE" o nome e retornar o ID. Eu pensei em duas abordagens para isso:

  1. Consultar banco de dados usando ajax em keyup (), isso parece que seria caro com muitas pessoas pesquisando
  2. Envie todos os dados para o cliente como um arquivo JSON quando eles carregam a página e pesquisam por meio dela usando JavaScript para reduzir a carga no banco de dados

Qual abordagem é melhor? Ou se você tiver uma abordagem melhor, estou aberto a sugestões.

    
por obl 11.11.2017 / 00:25
fonte

2 respostas

4

Existe uma abordagem melhor.

Primeiro, não envie todos os resultados por padrão em um arquivo json. Seus clientes terão que baixar um arquivo enorme para potencialmente nenhum motivo, e você pode ter problema de cache do navegador quando os resultados mudam.

Em segundo lugar, a pesquisa de chave é válida desde que você a acione depois que X letras forem escritas dentro da entrada de pesquisa. X depende do seu negócio, obviamente. Além disso, ao optar por essa solução, você deve fazer a paginação do lado do servidor para que as solicitações sejam leves e rápidas. Eles não devem prejudicar seus servidores, mesmo que todos enviem spam na pesquisa.

Isso leva ao último ponto: implemente o cache do lado do servidor para essas consultas. Muitas pessoas pesquisam as mesmas coisas, e o armazenamento em cache pode mostrar um enorme ganho em desempenho e custo. A escolha do mecanismo de cache depende da frequência de alterações aplicadas a esses resultados.

Entre todos os itens acima, o segundo ponto é crucial, especialmente fazendo solicitações leves. Como vejo que você está usando o MySQL, ter uma indexação inteligente da sua tabela, uma vez que ela nunca muda, pode levar a resultados incrivelmente rápidos.

    
por 11.11.2017 / 01:48
fonte
3

2000 itens não são realmente muito dados se cada item for um nome e um id (a menos que os nomes sejam grandes). Pesquisando através de Javascript será bastante rápido. Se compactado quando enviado pela conexão HTTP, provavelmente é menor que 10kb; mesmo como objetos JavaScript, deve estar abaixo de 200kb na memória. Eu vejo rotineiramente folhas de estilo duas vezes maiores.

Se a pesquisa for a principal função desta página, considere a possibilidade de carregar os dados após o término do carregamento da página (em um retorno de chamada pronto para DOM ou via javascript assíncrono ou qualquer outro). Se os usuários não forem necessariamente pesquisar, você poderá carregar os dados com preguiça quando o campo de pesquisa estiver focalizado. Como os dados não mudam, você poderia armazená-los em um CDN para acesso de baixa latência em todo o mundo sem afetar seus servidores.

    
por 16.11.2017 / 20:29
fonte