Pergunta

Eu estou no processo de desenvolvimento de um site de rede social.

E foi pensando em escalabilidade desde o primeiro dia do projeto, já afinado o site e consultas com o melhor de minha capacidade.

No entanto; Algumas páginas são muito pesadas dados e eu não tenho certeza se eles são o carregamento o mais rápido que podia, então eu estava pensando em implementar uma solução de cache distribuído.

Mas não é completamente certo o que eu deveria armazenar em cache e não cache. Ou se os tempos de carregamento da página corrente de 1 segundo é bom ou ruim.

A consulta mais pesada é pegar as informações do membro esta consulta obtém todas as informações e qualquer coisa do membro relacionado a eles, como no caso deste site seus objetivos, Tipo Blog entradas, incentivos, fotos, atualizações de status (como o Twitter), blog info (para crossposting suas entradas) etc etc.

De qualquer forma, eu deveria armazenar em cache esta informação? E você acha 1 vezes segundo carregamento da página são razoavelmente rápido? Algumas páginas são menos de um segundo entre 4-6 10ths de um segundo.

Foi útil?

Solução

Eu implementar cache em cada camada de sua aplicação, se possível.

Você pode armazenar em cache páginas ao mais alto nível, objetos no nível do código, e garantir o seu banco de dados é o cache ambas as consultas e os principais dados corretamente no nível mais baixo.

Em termos do que você precisa para cache, quaisquer objetos que serão repeadedly acessados ??deve ser armazenado em cache, especialmente aqueles que não são susceptíveis de alterar muito frequentemente. Você pode, em seguida, redefinir o cache desse objeto somente quando ele é editado. (Seja cauteloso de cache objetos que são atualizados com freqüência como um ciclo constante de substituir o cache em quase todos os carga irá degradar o desempenho em vez de melhorá-lo)

Para medir o desempenho, eu não olhar para quanto tempo uma única página demora a carregar, mas o Google para algumas ferramentas de medição de desempenho que você realmente precisa para testar o quão rápido cada um executa página sob pressão. Sua página de informações do usuário pode não ser o maior alvo cache se ele raramente é acessada por exemplo. Você deve estar centrado nas páginas mais utilizados.

Outras dicas

A resposta típica é:

  • Cache informações que raramente é atualizado.
  • Não armazene o que mudam com freqüência.

No seu caso, você poderia armazenar em cache tudo em arquivos simples (um arquivo por usuário, por exemplo) e destruir um arquivo de cache do usuário sempre que algo é atualizado pelo correspondente. Se o arquivo de cache não existe, criá-la antes de exibir o conteúdo associado.

Agora, sobre tempo de carregamento (que pode ser muito diferente, dependendo da localização do usuário), aqui estão alguns números informativos de um fórum PHP de um site de jogos:

  • JS tempo de carga: 0.274
  • consulta de contagem: 15
  • PHP tempo de carga: 0,0524
  • Uso da memória: 1.013 MB

E este é considerado pela comunidade como uma boa experiência. Mas é terrivelmente subjetiva.

A questão de carregamento da página já foi perguntado:

O que é considerado um bom tempo de resposta para uma dinâmica, aplicação web personalizado?

Em termos de armazenamento em cache, você tem que medir a quantidade de tempo que seria gasto carregar os dados de cada vez contra o carregamento do cache. Quanto maior o cache, o menos eficaz se torna. Então você não quer carregar muitos dados no cache. O que usamos aqui é um cache de rolamento, com os dados menos utilizados recentemente ser descartado, uma vez que atingiu o limite de tamanho de cache. Você, então, ajustar o limite de acordo com os resultados reais de desempenho.

Para dados específicos do perfil do usuário, armazenar tanto quanto você pode em um bilhete FormsAuth / cookie. Caching (HttpContext.Current.Cache) itens de usuário específicas exigirá recursos X em seu servidor por usuário, a mesma sessão seria (mas com menos da dor de cabeça). Se você pode descarregar o máximo possível para o usuários Ticket ou cookie (é como 4K), então você vai realmente ajudar a sua servidores desempenho enquanto escala.

Você deve ser apenas recuperar os bits de informação que a página precisa. Por exemplo, se você estiver carregando dados blog, NÃO carga foto de. Sua mais trabalho, sim, mas se você quiser escalar você terá de analisar as necessidades de cada página.

Certifique-se de entender que há diferenças entre banco de dados Query Cache (execução do plano de re-uso), caching de objetos (Httpcontext.Cache) e cache de página (Response.Headers [Expira]).

Web design guru Vincent Flanders sugere que nada mais de 4 segundos é muito tempo para uma página web para carga . Penso que esta é uma boa regra muito de ouro.

Quanto caching ou outro movimento de otimização de desempenho, eu recomendo que você realizar algum teste de desempenho. Há uma série de kits de testes de desempenho disponíveis no mercado. Teste irá mostrar onde as áreas problemáticas são. Não há nenhum sentido em você acrescentando lógica de cache para algo que já funciona bem. Por outro lado, problemas de desempenho pode ocorrer quando você não pode esperar que eles, envolvendo dados que você pode não ter considerado cache.

Algo que eu também encontrei com testes de desempenho é que ele pode encontrar pontos em seu código onde impasses estão ocorrendo, ou onde otimizações de banco de dados simples ajudaria. Talvez adicionar um índice para uma tabela irá acelerar uma página em vez de adicionar um monte de lógica de cache.

Eu mantê-lo simples, e refatorar apenas para desempenho em que você precisa para fazê-lo.

Além disso, teste cedo e teste de freqüência. Eu conheço um monte de pessoas dizem para considerar o desempenho passado, mas você pode realmente código sozinho em um canto se você não, pelo menos, começar a considerar que no início do ciclo de vida de desenvolvimento.

Algumas pesquisas sugerem que a aplicação interativa deve fornecer feedback dentro de 250ms para não fazer o usuário pensar que está preso ou que a operação falhou. O nível de aceitação na web é um pouco maior, porém, e, geralmente, o feedback é fornecido pelo webbrowser que uma nova página é carregada. Com AJAX você tem que tomar cuidado para fornecer som tipo de feedback, porque embora o navegador não vai mostrar o que está acontecendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top