Dado que
- As CDNs são uma coisa boa porque podem servir recursos mais próximos ao cliente, o cliente pode armazená-los em cache e você pode reduzir a carga no seu próprio servidor.
- Em navegadores recentes, o carregamento de recursos de servidores de terceiros não diminui a segurança, graças ao Subresource Integrity (SRI) .
- As CDNs podem estar inativas ou bloqueadas em alguns países e não estão disponíveis no desenvolvimento offline 1 .
Eu acho que é atraente usar CDNs, mas também estar preparado para que não estejam disponíveis. Esta postagem do blog fornece uma boa introdução a diferentes abordagens para fornecer fallbacks. Se você observar o exemplo básico , poderá ver que ele já contém um pouco de código padrão para fornecer fallbacks apenas para jQuery e Bootstrap, enquanto a solução preferida sugere o uso de Fallback.js , que parece não ter sido mantido no último ano . Da mesma forma, a questão SO mais relevante para o tópico é apenas fornecer um fallback para o jQuery.
No entanto, na maioria dos projetos do mundo real, eu esperaria ter 5 ou mais recursos js / css, por isso acho que você não deve repetir alguns clichês confusos para fornecer fallbacks para todos eles. Além disso, toda vez que você adiciona ou atualiza um recurso, agora é necessário
- Atualize o link CDN
- Atualize a cópia local de fallback baixando manualmente ou alterando a versão em npm / bower config
- Atualize o link para o fallback
- Atualize o hash do SRI
Enquanto no Mundo Ideal , eu esperaria adicionar / atualizar o recurso em um arquivo de configuração e executar todas as outras etapas automaticamente (e depois executar testes para verificar se a atualização quebrou alguma coisa).
Já existe um fluxo de trabalho estabelecido para conseguir isso?
Ou as CDNs, e especialmente a SRI, ainda são muito recentes?
Ou a maioria das pessoas simplesmente não se importa em fornecer substitutos para os recursos da CDN?
1. Embora você possa ter uma compilação de desenvolvimento que não dependa de CDNs, também considero uma forma de fallback, pois ela também precisa ser mantida.
Fallback.js
não é mantido porque já funciona perfeitamente? O software não precisa ser alterado a cada 5 minutos, se já estiver funcionando.