Html5-boilerplate: Fallback local do jQuery: o Chrome não carregará mais scripts por meio de document.write em conexões lentas

Criado em 8 set. 2016  ·  9Comentários  ·  Fonte: h5bp/html5-boilerplate

via @jpdevries em um comentário em 1039

Falando do fallback document.write () (que eu acho que é uma regra), e quanto a isso?

O Chrome não carregará mais scripts inseridos por meio de document.write () quando a conexão com a rede for lenta
https://developers.google.com/web/updates/2016/08/removing-document-write

Como responder a isso já foi discutido?

Ainda não, mas obrigado por nos chamar a atenção para isso.

Aqui estão as partes interessantes do documento vinculado

Com esses dados em mente, a equipe do Chrome anunciou recentemente a intenção de intervir em nome de todos os usuários quando detectarmos esse padrão conhecido, alterando como document.write () é tratado no Chrome (consulte o Status do Chrome). Especificamente, o Chrome não executará o

help wanted javascript

Todos 9 comentários

Obrigado por abrir o problema @roblarsen. Tenho me perguntado se talvez adicionar defer a todos os scripts incluídos resolveria isso.

Os scripts com os atributos 'async' ou 'defer' ainda serão executados.

Algo como

<script defer src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script defer>window.jQuery || document.write('<script defer src="js/vendor/jquery-1.12.4.min.js"><\/script>')</script>
<script defer src="js/plugins.js"></script>
<script defer src="js/main.js"></script>

O

<script defer>window.jQuery || document.write('<script defer src="js/vendor/jquery-1.12.4.min.js"><\/script>')</script>

é como uma espécie de início de defer . Parece funcionar, mas não tenho certeza se está correto.

Hm ... ou talvez os scripts jquery possam ser assíncronos e o plugin e os scripts principais adiam. É preciso ter certeza de que carregam após o jQuery, é claro.

@jpdevries Acho que reescrever o script de inclusão para usar uma interface DOM moderna (parentNode.insertBefore) como o Google Analytics usa também seria algo para se olhar.

Discussões relacionadas sobre isso que podem ajudar a tomar decisões:

@FagnerMartinsBrack Obrigado pelos links. Seu próprio tópico no reddit ajudou a esclarecer as coisas. Enquanto houver uma condição de origem cruzada, não temos nada com que nos preocupar.

Uma estratégia de adiamento é a melhor opção na minha opinião. Eu não gosto de assíncrono, para scripts que devem estar prontos o mais rápido possível como jQuery. Eu sugeri uma implementação de longo prazo no segmento WICG / intervenções ...

@jpdevries Duas coisas com seu código 'adiar':

  1. Adiar em uma linha <script> s foi descontinuado por WHATWG. A pobre e insuficiente razão dada foi que ninguém o usou ... Verdadeira história idiota, mas infelizmente aconteceu ... Então defer início não funcionará. :(
  2. A ordem de execução 'adiar' apresentava erros no IE 8-9. E havia problemas com o evento 'interativo' disparando muito cedo no IE 9-10 que poderia afetar a execução de scripts de 'adiamento'. O último pode ser contornado; No entanto, isso envolve um hack e um script inline inferior para acionar "interativo" corretamente ... Portanto, a condição para um clichê público usando defer é principalmente esperar que o uso do IE10 acabe.

@hexalys 😭 Tenho usado o início de adiar para coisas como CDNs de estilo h5bp com fallback local ou fazer detecção de recurso antes de incluir algo como um polyfill. Isso é uma chatice!

Fechando! Estavam a salvo!

@roblarsen oh isso é ótimo! O Chrome reverteu sua decisão? Estou curioso para saber por que estamos seguros, porque eu realmente ❤️ esse padrão

@jpdevries Ele só é acionado quando a solicitação é de origem cruzada, então estamos bem. Afinal, é um recurso local.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

davidmurdoch picture davidmurdoch  ·  30Comentários

neilcreagh picture neilcreagh  ·  28Comentários

coliff picture coliff  ·  14Comentários

sideshowbarker picture sideshowbarker  ·  5Comentários

tomasz1986 picture tomasz1986  ·  5Comentários