1. O que é cache ASP/por que deveria ser armazenado em cache? Quando seu site é inicialmente estabelecido usando tecnologia ASP, você pode sentir a conveniência trazida pela tecnologia de página web dinâmica ASP, bem como a liberdade de modificação e o controle http gratuito. No entanto, à medida que o número de visitas aumenta, você certamente descobrirá que a velocidade de acesso ao seu site está ficando cada vez mais lenta e o IIS reinicia cada vez com mais frequência. Em seguida, você deve querer otimizar o asp, como substituir o banco de dados por melhor desempenho, criar índices, escrever procedimentos armazenados, etc. Algumas dessas medidas não exigem aumento de pressão de custos, enquanto outras exigem pressão de custos significativa (como clustering de acesso ao SQL), e o efeito não é necessariamente certo.
Diante da pressão do acesso à web, acho que a maneira mais econômica é usar a tecnologia de otimização de cache para aliviar a pressão do serviço da web.
O aumento do tráfego da web geralmente significa um rápido crescimento na demanda pelos seguintes recursos:
1. O aumento no tráfego da placa de rede requer mais CPU para processar o tráfego de rede e threads de E/S de rede.
2. A necessidade de abrir/fechar conexões de banco de dados com mais frequência (se a tecnologia de banco de dados for usada - geralmente o ASP usa bancos de dados como armazenamento de dados), o número de coisas que consomem recursos seriamente e os impasses causados por transações que competem por recursos aumentarão a I/ O Ou consumo de CPU.
3. Se a sessão for usada, o IIS consumirá mais memória para manter o estado, e o consumo de memória pode causar memória física insuficiente, causando trocas frequentes entre a memória física e a memória auxiliar, fazendo com que a execução do código seja pausada e a resposta da web seja bloqueada. .
4. Devido à falta de resposta oportuna ao acesso, causará falha no acesso à página web, fazendo com que os usuários atualizem, agravando assim a demanda por recursos como CPU e memória.
Na verdade, considerando aplicações web comuns, muitas vezes a execução dinâmica de código é desnecessária.
2. A classificação do cache ASP pode ser resumida sem autorização. O cache ASP pode ser dividido em duas categorias:
1. Cache de arquivos O chamado cache de arquivos é baseado no julgamento lógico de que a execução específica de um determinado ASP não mudará significativamente dentro de um período de tempo. Portanto, o conteúdo é armazenado na forma de HTML estático e, em seguida, o. a tecnologia de redirecionamento da web é usada para permitir aos clientes acesso ponta a ponta a arquivos estáticos para reduzir a necessidade de CPU, recursos de banco de dados, etc. Existem muitos desses aplicativos. Por exemplo, muitos fóruns regeneram a postagem inteira em um arquivo estático ao responder a uma postagem e depois a redirecionam, como o fórum donews.com. Há também um efeito colateral (benefício) de ser estático - pode ser facilmente indexado por mecanismos de busca como o Google. Alguns dos chamados sistemas de divulgação de notícias adotaram esta tecnologia.
2. Cache de fragmentos de arquivo O chamado cache de arquivo também é baseado no julgamento lógico. Uma determinada parte dos dados (geralmente obtidos por consulta a um banco de dados de grande capacidade que consome recursos) não será alterada dentro de um determinado período de tempo. podemos armazenar esses dados na forma de arquivos, quando necessário, os dados podem ser obtidos através da leitura de arquivos para evitar aumentar a carga no banco de dados. Por exemplo, normalmente armazenamos alguns dados em formato XML e depois usamos É assim que o fórum CSDN é tratado.
3. Cache da memória principal Além disso, você também pode considerar o armazenamento em cache na memória, armazenando conteúdo que requer resposta oportuna na memória e, uma vez necessário o acesso, ele será imediatamente transferido do armazenamento rápido. Se um grande número de requisitos de acesso estiver concentrado em algumas páginas pequenas ou se a memória principal for grande o suficiente, acho que o uso do cache da memória principal pode definitivamente melhorar muito o desempenho do acesso à Web.
3. Como implementar/usar cache Para implementar cache, você precisa considerar as seguintes questões:
1. Quais páginas não serão alteradas em um curto período de tempo?
Analise seu próprio site, existem muitas páginas desse tipo. Por exemplo, um site geralmente possui colunas de notícias e informações. Essas colunas geralmente são postadas pelos mantenedores do site em um determinado horário do dia e as páginas raramente são alteradas depois disso. Então essas páginas são adequadas para cache de arquivos estáticos. Na verdade, é isso que o chamado sistema de comunicados à imprensa faz, então você também pode consultar as ideias desses sistemas para transformar suas páginas ASP dinâmicas originais.
2. Essas páginas são geradas utilizando a mesma lógica para todos os visitantes (ou seja, os visitantes não são diferenciados).
Além de colunas como notícias e informações onde todos os visitantes veem a mesma interface, aplicativos que consomem recursos, como fóruns, geralmente podem ser projetados para gerar uma lógica unificada (a mesma postagem será visualizada da mesma forma por três pessoas e por três pessoas). Essas páginas de aplicativos também podem ser alcançadas usando cache estático. Você também pode considerar a fragmentação dos dados e o uso de tecnologia de script para processá-los além dos recursos de processamento do servidor, ou seja, do navegador do cliente.
3. Os custos e ganhos da utilização do cache.
O principal é “espaço para tempo (de resposta)”. Use a tecnologia de cache para pré-processar o conteúdo que será frequentemente necessário no futuro para melhorar a capacidade de resposta do servidor web e, mais importante, ganhar a preferência dos visitantes.
O preço é que a procura por espaço web aumenta e, ao mesmo tempo, o efeito do acesso pode ser afetado.
Mas acho que o cache adequado tem mais vantagens do que desvantagens.
4. Esses locais não são adequados para armazenar em cache páginas de consulta dinâmica. O conteúdo da consulta de cada pessoa é diferente, portanto, os resultados de exibição são diferentes, portanto, é impossível armazenar em cache os resultados da consulta. causando problemas de gerenciamento. O custo é alto (supondo que você armazene em cache 1.000 palavras-chave de consulta, o gerenciamento da correspondência entre essas palavras-chave e o cache também será problemático).
4. Exemplo de análise Suponha que o layout original de um fórum de sugestões seja o seguinte:
No diretório raiz:
página inicial default.asp, geralmente destaques, recomendações, etc.
listBorad.asp Este arquivo lista os nomes e introduções de todas as colunas. Se possuir o parâmetro MainBID, significa que as colunas da seção devem ser listadas.
listThread.asp Se este arquivo não contém nenhum parâmetro, significa listar todos os posts, e se carrega MainBID, significa listar todos os posts em um determinado bloco. Se o subBID for realizado, significa listar as postagens em colunas específicas. Se o parâmetro page for carregado, os tópicos serão listados em páginas.
ViewThread.asp lista o conteúdo de uma postagem. Presumimos que a postagem seja exibida como um comentário e todos os comentários serão listados no final. O parâmetro ID é o post a ser exibido.
Reply.asp responde a uma determinada postagem e carrega o parâmetro Id para responder a uma determinada postagem. O resto não será discutido por enquanto.
Pelo exposto, podemos ver que se tudo for feito usando ASP/PHP original, a execução de quase todos os arquivos asp exigirá operações de banco de dados, consultas frequentes e consultas multitabelas. Você deve saber que consultar o banco de dados acabará por levar a uma diminuição no desempenho e na velocidade de resposta, o que afetará a navegação lenta dos visitantes e não favorece a qualidade da web. O que é mais importante é que para duas pessoas, A e B, se acessarem ViewThread.asp e similares, se o ID for o mesmo, muitas vezes elas verão o mesmo conteúdo (o código HTML recebido por seus navegadores é quase o mesmo). mesmo), mas para este "Mesmo conteúdo", o servidor precisa abrir conexões de banco de dados, consultas, ler registros, exibir, fechar registros e conexões de banco de dados. . . . Se mais pessoas acessarem as seguintes operações que consomem recursos do servidor, o resultado final será que essas pessoas consumirão mais recursos do servidor. Na verdade, esses esforços repetidos para o “mesmo conteúdo” podem ser evitados usando a tecnologia de cache para otimização. por exemplo:
Depois de enviar o conteúdo em respond.asp, chamamos imediatamente a função estática e armazenamos todo o conteúdo da postagem como um arquivo html estático, como viewThread_xxxx.htm. Em circunstâncias normais, ao acessar viewThread.asp?ID=xxxx, o sistema redireciona automaticamente. ao arquivo estático correspondente viewThreadxxxx.htm. Desta forma, quando um post não tiver a versão mais recente, será sempre um conteúdo estático fornecido aos visualizadores; assim que houver um novo envio, ele será atualizado para o arquivo estático. Desta forma, muitas operações do banco de dados serão salvas; e a resposta será muito melhorada.
listBorad.asp também pode ser implementado estaticamente. Podemos analisar os parâmetros que ele pode carregar, definir o nome do arquivo de cache como listBoard_xx.htm e atualizar listBoard_xxx.htm ao adicionar novas colunas. listThread.asp é semelhante, exceto que, por ter mais parâmetros, haverá muitos arquivos de cache. Se você deseja armazenar em cache listThread.asp? subBID=xxx&page=2, o arquivo estático correspondente é listThread_xxx_p2.htm. O mesmo vale para default.asp.
Então, como saber quando atualizar? Quando será atualizado?
Discutindo listThread.asp? subBID=xxx&page=2, extraímos subID e página ao executar listThread.asp e, em seguida, detectamos se listThread_xxx_p2.htm existe, chamamos a função de geração estática para gerar o arquivo e, finalmente, redirecionamos. aqui arquivos estáticos. Observe que a ausência aqui significa que há novos conteúdos que precisam ser atualizados.
Então, como fazer com que o arquivo não exista? excluir. Quando publicamos uma nova postagem, excluímos uma postagem ou movemos uma postagem, podemos excluir todos os arquivos estáticos como listThread_xxx_p2.htm. Isso informa quando armazenar em cache.
Agora resta uma dúvida: como gerar arquivos estáticos?
Notamos que o “mesmo conteúdo” que mencionamos anteriormente. Podemos fazer uma cópia de default.asp, listThread.asp, etc. antes da transformação, chamada default_d.asp, listThread_2.asp, e no mesmo diretório (teoricamente listThtrad.asp?subID=123 é o mesmo que LISTtHREAD_D.ASP ? O resultado do acesso de SUBID=123 será o mesmo conteúdo), então na lógica que precisa gerar arquivos estáticos, chamamos a cópia antes da transformação através de solicitação de acesso WEB, pegamos o código html e armazenamos como um arquivo estático. Essa solicitação da web é, na verdade, equivalente ao próprio servidor visualizar o HTML que será gerado antes que qualquer navegador real acesse o conteúdo estático e, em seguida, retorne esses códigos e os armazene como arquivos estáticos usando a função de operação de arquivo. Desta forma, o arquivo cache é criado antes do visualizador real.
Tal solução dificilmente afetará o layout original e quase nunca causará erros como 404 devido a modificações. Em segundo lugar, os arquivos estáticos também ajudarão seu site a ser facilmente indexado por mecanismos de pesquisa como o Google. Por que não?
Por fim, um lembrete, através do acesso web, no ambiente de programação ASP, muitas pessoas utilizam o componente xmlHTTP para acessar, o que causará muitos problemas. O próprio xmlhttp irá armazenar em cache os recursos solicitados, fazendo com que o conteúdo que solicitamos através deste componente não seja o mais recente, causando confusão lógica. Portanto, você deve escolher o objeto http do servidor xml ou o componente winhttp para implementar recursos de solicitação da web.
Usar a tecnologia de cache no ASP pode melhorar muito o desempenho do seu site. Na verdade, esses métodos de implementação são muito simples. Eles explicarão como funciona o cache no servidor e como você pode usar um método chamado tecnologia de conexão ADO.
Antes de apresentar essas tecnologias, vamos explicar o que é exatamente a tecnologia de cache ASP.
O chamado cache serve, na verdade, para abrir um espaço na memória para salvar dados. Ao usar o cache, você não precisa acessar com frequência os dados salvos no disco rígido. a angústia de ver o pobre disco rígido ficar cheio, sou torturado pela leitura de dados. Depois de executar uma consulta e colocar os resultados da consulta no cache, você poderá acessar rapidamente os dados repetidamente. E se você não colocar os dados no cache, ao executar a consulta novamente, o servidor gastará o processo obtendo e classificando-os no banco de dados.
Quando os dados são armazenados no cache, o tempo gasto na consulta novamente é principalmente o tempo para exibir os dados.
Em outras palavras, não devemos colocar dados que precisam ser alterados com frequência no cache do servidor. Devemos colocar dados que mudam menos, mas que precisam ser acessados com frequência no cache.
Agora discutiremos como o ASP usa a tecnologia de cache no lado do servidor e, em seguida, discutiremos como o ASP usa a tecnologia de cache no lado do cliente.
Quando você tem uma grande quantidade de dados (estáticos, ou seja, com menos alterações) que precisam ser exibidos ao cliente, você pode considerar o uso da tecnologia de cache do lado do servidor. Essa tecnologia é especialmente adequada para sites com forte consistência de estilo de exibição (haha, não é fácil de usar para sites não convencionais).
Na verdade, o método de implementação é muito simples. Basta olhar o exemplo simples abaixo para entender.
Este é um exemplo de programa para exibir categorias de livros
Arquivo DisplayBooks.ASP:
<%@LANGUAGE=JavaS
roteiro% >
<html>
<corpo>
<método de formulário = postagem>
Classificação do livro;
<p>
< tipo de entrada = enviar >
<%
função getBooksListBox()
{
BookListBox = Application("LivrosListBox")
if (BooksListBox! = null) return BooksListBox;
crlf = String.fromCharCode(13, 10)
BooksListBox = “<selecionar nome=Livros>” + crlf;
SQL = “Selecionar *FROM Livros orDER BY Nome”;
cnnBooks = Server.CreateObject("ADODB.Connection");
cnnBooks.Open("Livros", "Admin","");
primeirosLivros = cnnBooks.Execute(SQL);
fldNomeLivro = rstLivros("NomeLivro");
enquanto (!rstLivros.EOF){
BookListBox = BookListBox + ”<opção>” +
fldNomeDoLivro + "" + crlf;
primeirosLivros.MoveNext();
}
BookListBox = BookListBox + ""
Application("LivrosListBox") = LivrosListBox
return BookListBox;
}
%>
É muito simples. Na verdade, usa tecnologia de aplicação muito simples e a diferença é apenas uma frase:
Application("LivrosListBox") = LivrosListBox
Você pode verificar e descobrirá que o número de solicitações no servidor será bastante reduzido. Esta situação é especialmente adequada para o conteúdo do site que não é atualizado com muita frequência, por exemplo, você só atualiza uma vez por dia (ou por muito tempo).
A seguir, discutiremos uma tecnologia de cache do lado do cliente. Essa tecnologia também é chamada de tecnologia de conexão ADO desconectada (o nível de tradução é muito baixo, por que parece tão estranho). Esta tecnologia é usada principalmente para salvar informações pessoais dos usuários, como senhas de usuários, codinomes, etc. Ele usa principalmente algumas propriedades do ADO. Ao mesmo tempo, também responde à pergunta que alguns internautas mencionaram sobre se os objetos ADO podem ser usados no Applocation. A explicação não está clara, deixe o código falar:
Arquivo GLOBAL.ASA:
< !–METADATA TYPE=”TypeLib” FILE=”C:Arquivos de ProgramasCommon
Arquivossistemaadomsado15.dll”–>
<SCRIPT LANGUAGE=VBScript RUNAT=”Servidor” >
Subaplicativo_OnStart
SQL = “Selecione nome de usuário, senha de UserInfo”
cnnUsers = “DSN=Usuário”
Definir rsUsers = Server.CreateObject("ADODB.Recordset")
'Observe que as duas frases a seguir são usadas para implementar a tecnologia ADO chamada desconexão disponível.
rsCustomers.CursorLocation = adUseClient
rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly
'Desconecta o RecordSet do banco de dados
rsCustomers.ActiveConnection = Nada
Definir Aplicativo("rsCustomers") = rsCustomers
Finalizar sub
ArquivoUsers.ASP
<%
'O método clone permite que cada usuário tenha sua própria coleção RecordSet
Defina seusUsuários = Aplicativo("rsUsers").Clone
Defina UserName = seusUsuários("NomedeUsuário")
Definir Senha = seusUsuários("Senha")
Faça até yourUsers.EOF
%>
Nome de usuário: < %= Nome de usuário % > Senha de usuário: < %= Senha % >
<%
seus usuários.MoveNext
Laço
%>