Gerenciando os dados usando um cache de cliente usando AjaxGerenciando os dados usando um cache do clienteO desempenho da aplicação depende do cache que são executadas no cliente e servidor lados. Se os caches executar mal, o aplicativo irá executar mal. Se os caches são eficazes, o pedido será eficaz. Em grande medida, o que eu disse é óbvio, mas gostaria de salientar que não importa quão bem escrito a outras partes do código são, se você tiver uma má estratégia de cache, o aplicativo irá executar mal. Quatro tipos de estratégia de cache podem ser implementadas:
• Validação HTTP: A forma de cache onde o cliente e compartilhar informações sobre o navegador de um URL usando um protocolo de handshaking. Esta forma de cache não reduz o contador de conversa, mas não reduz a quantidade de dados enviados na conversa. Use este método se você tiver dados que muda regularmente e sua conexão de rede entre o cliente eo servidor é de qualidade de banda larga. • Do lado do cliente apenas: A forma de cache, onde apenas os esconderijos do lado do cliente a informação. Normalmente, você usar essa abordagem quando o servidor não suporta o cache, ou se a ida e volta entre o cliente eo servidor requer muito tempo. • Do lado do servidor apenas: A forma de cache, onde apenas os esconderijos do lado do servidor as informações. O cliente sempre consultar o servidor para obter as informações adequadas. Esta forma de cache geralmente é ineficiente, e deve ser usado somente se a distância da rede física entre o cliente eo servidor é mínima (por exemplo, o navegador eo servidor estão no mesmo computador). • Cliente e do servidor: Uma maneira generalizada ideal de cache onde o servidor e as informações do cache do cliente. Em cada uma dessas estratégias de cache, você precisa pensar sobre a largura de banda disponível, que tipo de dados que você está recebendo, e quão longe o cliente é a partir do servidor. Uma preocupação adicional é a procurações sessão entre o cliente eo servidor que poderia armazenar a informação. Implementação de um único cache Pedido ClienteUm cache eficiente e eficaz, não iria mudar o modelo de programação do cliente. Portanto, um cache do lado do cliente é melhor implementado, modificando a classe assíncrona. Então sempre que algum código usa assíncrono, o cache é controlada e verificada para ver se a resposta é já disponíveis. Se a resposta está disponível, então o código recebe a resposta imediatamente. O exemplo a seguir tem ganchos para fazer uso de um cache. Fonte: / cliente / scripts / Jaxson / Common.js função Asynchronous_call pedido () (var exemplo = this if (! this.settings) (throw new Error ( "Settings não está definido");) if (this.xmlhttp.readyState! = 4 & & this.xmlhttp.readyState! = 0) (throw new Error ( "pedido Atualmente ativa não pode continuar");) this.xmlhttp.open (request.action, request.url, é verdade, this.settings.username, este . settings.password); globals.info (pedido de abertura "+ request.url); if (Request.Headers) (for (defHeader em Request.Headers) (this.xmlhttp.setRequestHeader defHeader (, Request.Headers [defHeader] );)) if (this.settings.headers) (for (defHeader em this.settings.headers) (this.xmlhttp.setRequestHeader defHeader (, this.settings.headers [defHeader]);)) this.settings.url = request.url; if (this.cache.processAndBreakBeforeRequest this.xmlhttp (, pedido, this.settings) == true) ( globals.info ( "dados recuperados do cache para o pedido" + instance.settings.url); return; )this.xmlhttp.onreadystatechange = function () (if (instance.xmlhttp.readyState == 4) (globals.info ( "dados recebidos para solicitação" + instance.settings.url); if (instance.cache.processAndBreakAfterRequest instance.xmlhttp (, pedido, instance.settings) == true) ( return; )try (instance.settings.onComplete (instance.xmlhttp);) catch (e) (globals.errorHandler (e);))) try (this.xmlhttp.send (request.data);) catch (e) (globais. errorHandler (e);)) O código assíncrona é muito semelhante ao que foi apresentado no artigo 4. As novas peças estão em negrito. Conectando em uma cache assíncrono é fácil: você precisa capturar o pedido antes de ser enviado, em seguida, captura a resposta quando ela chega. Asynchronous não implementar um cache, porque há muitas maneiras de um código de cache. A estratégia mais inteligente, e um escolhido pelo assíncrona, é delegar as chamadas para outro método. No caso da captura de um pedido, o método é chamado this.cache.processAndBreakBeforeRequest. O XMLHttpRequest, o pedido, e as configurações da instância Asynchronous são passados para o método. Se o método retorna true, então Asynchronous_call retorna imediatamente. O retorno imediato geralmente indica que os dados estão no cache, mas também pode ser usado para parar uma solicitação. No caso da captura de uma resposta, no âmbito da implementação de onreadystatechange é uma solicitação para o método instance.cache.processAndBreakAfterRequest. Três parâmetros são passados para o método: uma instância XMLHttpRequest, pedido, e as configurações. Com base nesses três parâmetros, o cache pode armazenar os dados de resposta a ser recuperada em um momento posterior. Se o método retorna processAndBreakAfterRequest verdade, então os dados de resposta não é enviada para o método onComplete. De um modo geral, você não faria isso, mas é necessário se você estiver implementando um cache de validação HTTP. O tipo de cache que você deseja implementar depende de suas necessidades. Pode ser um cache do lado do cliente ou de um cache de validação HTTP. No âmbito do pedido de cotação da bolsa, um cache de cliente único pedido é criado. O cache do cliente único pedido será cache pedido cada vez e nunca fazer uma segunda solicitação HTTP física. Isso é bom para o caso do exemplo de cotação da bolsa, porque os dados históricos ticker nunca muda. Se os dados estavam a mudar, você precisa ter uma forma de indicar dados desatualizados. Nesse caso, um cache de validação HTTP seria mais adequado. O código a seguir é a implementação de um único cache solicitação do cliente. Fonte: / cliente / scripts / Jaxson / var Common.js CacheController = (_cache: new Array (configurações), CachedProcessAndBreakBeforeRequest) function (request, settings) (if (request.action == "GET") (var obj = CacheController._cache [ . url]; if (obj! = null) (var fakeXMLHttp = (status: 200, statusText: obj.StatusText, responseText: obj.ResponseText, responseXML: obj.ResponseXML) try (settings.onComplete (fakeXMLHttp);) catch ( e) (globals.errorHandler (e); return false) return true;)) return false;) function CachedProcessAndBreakAfterRequest (xmlhttp, request, settings) (if (xmlhttp.status == 200 & & request.action == "GET") (CacheController._cache settings.url [] = (Status: xmlhttp.status, StatusText: xmlhttp.statusText, ResponseText: xmlhttp.responseText, ResponseXML: xmlhttp.responseXML);) return false;) O cliente único pedido cache do lado só funciona quando o HTTP GET é chamado, que é totalmente lógico, mas não levanta a questão de saber se um POST, DELETE, PUT ou podem ser armazenados em cache. A resposta é, sim, eles podem, se o cache é inteligente. Por exemplo, se você fosse um cache PUT, em seguida, quando o mesmo URL é chamado usando GET, você não precisa consultar o servidor. Esta estratégia pode começar no problema se houver uma chance de que vários usuários será a execução de um PUT. Mas há uma otimização em que você pode desmembrar uma discussão JavaScript e consultar o estado dos dados enviados pelo PUT usando a validação de HTTP. É importante perceber que você pode ajustar o cache de acordo com suas preferências. Você pode até mesmo ajustar o cache de tal forma que ele pode URLs pré-determinadas URLs quando foram solicitados. O cliente único pedido cache do lado que não é inteligente e retorna um objeto se ele existe no cache, caso contrário, ele consultará o servidor HTTP. A função é chamado antes CachedProcessAndBreakBeforeRequest Asynchronous faz uma solicitação física. Quando a função é chamada, a existência da URL é testado no objeto CacheController._cache. Se a URL não existe, então falso é retornado, indicando que a URL deve ser executado. Se a URL não existe, então existe um objeto em cache. A existência de um objeto em cache significa que não é necessário chamar o servidor, e método onComplete o código pode ser chamado diretamente. O único problema com o objeto em cache é que não existe nenhuma instância XMLHttpRequest disponível. A solução para este problema é criar uma instância de falsificação de XMLHttpRequest. Usando o Javascript, é fácil criar um objeto falso. Quando as coisas ficam complicadas é que os métodos não foram definidos, assim eles não estão disponíveis. Os cabeçalhos não estão disponíveis, porque eles não tenham sido armazenados no objeto quando o objeto em cache foi criado. Novamente, o fato de que os cabeçalhos não foram armazenadas no cache destaca que esta é uma aplicação simples de XMLHttpRequest. A variável fakeXMLHttp representa o objeto XMLHttpRequest falso e é usado para chamar o método settings.onComplete do código. Porque settings.onComplete é chamado, o cache retorna um valor falso, indicando que Asynchronous não deve fazer uma solicitação HTTP. A outra parte do código de cache é a função CacheProcessAndBreakAfterRequest, que é usado para adicionar uma entrada de objeto em cache. A adição do objeto em cache é limitado a um código de status HTTP 200 e um HTTP GET. Se o objeto é adicionado à cache, em seguida, o XMLHttpRequest propriedade, status, statusText, responseText e responseXML são salvas. Se você queria criar uma aplicação completa do objeto XMLHttpRequest falso e salvar os cabeçalhos HTTP, você deve colocar esse código na função CacheProcessAndBreakAfterRequest. Como alternativa, você pode ser tentado para salvar uma referência à instância XMLHttpRequest. O problema é que o cache não está no controle da ocorrência de XMLHttpRequest, assim salvando uma referência, você não está salvando os dados, como a instância Asynchronous pode reutilizar a instância XMLHttpRequest para um outro pedido. Portanto, sempre que aplicar o cache, você precisa copiar a informação que deve ser guardado no cache. Implementando um cache HTTP validação do clienteA implementação de cache é simples em que uma vez que um pedido tenha sido executada e salvo, ele nunca será executado novamente. Para URLs onde os dados nunca muda, isso é aceitável. No entanto, há URLs onde as mudanças de dados, como é o caso de um ticker conservado em estoque real-time, eo cache de cliente único pedido é totalmente inaceitável. Nestas situações, o cache do cliente único pedido tem de ser estendido para usar a validação de HTTP. HTTP Expiração cache é uma má idéia (geral) Quando você estiver usando validação HTTP, você está deixando a infra-estrutura de Internet gerir a cache. Existem dois modelos: de expiração HTTP e validação HTTP. Ao usar Expiração HTTP, Você está dizendo que o conteúdo é válido para um determinado período de tempo. O período de tempo durante o qual os dados são válidos depende do que os cabeçalhos HTTP dizer. É geralmente uma boa idéia usar o modelo de expiração HTTP, e sim, é melhor usar Validação HTTP e escrever código para ajudar a infra-estrutura de Internet do seu trabalho. Para entender por que o modelo de expiração HTTP é problemática, considere o seguinte cenário. Diga que você está executando aweb site que hospeda feeds de notícias. Para reduzir o tráfego repetitivos no site, você habilitar o cache de HTTP e atribuir um tempo de expiração de 30 minutos. (O tempo de expiração é um valor arbitrário utilizado para fins ilustrativos.) Isto significa que quando um navegador downloads algum conteúdo, a próxima versão do conteúdo estará disponível em 30 minutos. Indicando um período de espera de 30 minutos é uma má idéia em que 30 minutos, a notícia pode mudar drasticamente. Um cliente que tenha descarregado algum conteúdo é, então, restrito a recuperação de notícias em ciclos de 30 minutos. Claro, o cliente pode ignorar ou esvaziar o cache, resultando em downloads das últimas informações. Se o cliente sempre esvazia o cache, o cliente sempre receberá as últimas notícias, mas a um custo de download de conteúdo que não pode ter mudado. O custo do recurso não deve surpreender ninguém, porque sempre recebendo as últimas conteúdo significa utilizar nenhum cache algum. Scripts como servlets Java / JSP ou ASP.NET costumam usar esta estratégia e gestão do administrador do site se pergunta por que há problemas de desempenho. um artigo submetido por Sonja Lande Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre. Importante: Este artigo "Gerenciando os dados usando um cliente de cache usando Ajax" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.
|
|||||
| Online: 222 users browsing the articles directory |
|
|