/ / AJAX App JavaScript Loading Problema - javascript, ajax, asp.net-mvc

AJAX App JavaScript Loading Issue - javascript, ajax, asp.net-mvc

Estou criando um aplicativo ajax completo ondeHá uma página de base e todas as páginas para as quais o usuário navega no aplicativo são carregadas via ajax em um div de conteúdo na página. Na página de base eu incluo os vários scripts que são necessários para cada página dentro do aplicativo (jQuery, jQuery-UI, outros arquivos javascript personalizados). Em seguida, nas várias páginas com o aplicativo, incluo um ou dois scripts para cada página que contém a lógica necessária apenas para essa página. Cada um desses arquivos de script tem algo que é executado no evento pronto da página. O problema é que toda vez que o usuário navega para a página 1, o arquivo page1.js é carregado. Então, se eles visitarem essa página 10 vezes, esse script será carregado dez vezes em seu navegador. Analisando as ferramentas do desenvolvedor do script do Chrome depois de correr pelo site, vejo toneladas de scripts duplicados.

Eu li em algum lugar sobre a verificação para ver se oscript já foi carregado usando um valor booleano ou armazenando os scripts carregados em uma matriz. Mas, o problema com isso é que, se eu ver o script já está carregado e eu não carrego, a função de página pronta não é acionada para o arquivo javascript da página e tudo falha.

Há algum problema em ter o arquivo javascript carregado repetidamente quando o usuário visita a mesma página várias vezes?

Eu notei olhando para o tráfego de rede quetoda vez que visitamos a página, o script é solicitado com um parâmetro de número aleatório (/Scripts/Page1.js?_=298384892398) que causa a solicitação forçada do arquivo de script todas as vezes. Eu defini as configurações cache: true no método ajaxSetup do jQuery e removi o parâmetro da solicitação e, portanto, a versão em cache do arquivo javascript foi carregada em vez de realmente fazer uma solicitação HTTP separada para ele. Mas, o problema é que eu não quero que todas as requisições do ajax sejam armazenadas em cache enquanto o conteúdo muda o tempo todo. Existe uma maneira de forçar o armazenamento de apenas arquivos javascript, mas permitir que todas as outras solicitações do ajax não sejam armazenadas em cache.

Mesmo quando forcei o cache em todas as solicitações, o arquivo javascript ainda aparecia várias vezes nas ferramentas do desenvolvedor. Talvez isso não seja um grande problema, mas não parece muito certo.

Algum conselho sobre como lidar com essa situação?

Respostas:

1 para resposta № 1

Sobre sua primeira pergunta:

Toda vez que você carrega um arquivo JavaScript, todo oo conteúdo é avaliado pelo navegador. Depende somente do conteúdo se você puder carregá-lo e executá-lo várias vezes seguidas. Eu não considero uma boa prática fazê-lo.

Ainda assim, eu recomendo que você encontre uma maneira de verificar se ele já foi carregado e disparar manualmente o evento "página carregada" dentro do código já presente.

Para a segunda pergunta: Eu suponho que o script é destinado a aparecer várias vezes ao incluí-lo várias vezes. Para dar um conselho sobre como não armazenar em cache o JS carregado, eu preciso saber como você carregou o código, como você faz AJAX eo configuração geral do jQuery.


0 para resposta № 2

Depois de fazer mais pesquisas, parece queé na verdade apenas um problema do Chrome. Quando você carrega um script via AJAX, pode incluir o seguinte em seu código para que ele apareça nas ferramentas do desenvolvedor do Chrome

// @ sourceURL = some-script-name

O problema é que, quando você sai da página, as ferramentas do desenvolvedor mantêm o script, mas na verdade ele não é mais referenciado pela página.