Devo carregar bibliotecas de terceiros do fornecedor ou do cdn?

Já vi plugins que baixam bibliotecas de terceiros e as carregam como arquivos locais a partir de /vendor, e outros que exigem o uso da biblioteca via CDN.

Uma abordagem é melhor que a outra em termos de largura de banda/velocidade?

Há uma pequena área cinzenta entre os dois. Você pode configurar o Discourse para servir ativos, incluindo JS de temas/plugins, por meio de um CDN. Assim, mesmo que seu plugin carregue a biblioteca externa em /vendor, ela será carregada a partir do CDN que você configurar no Discourse. No entanto, isso é um CDN privado.

Dito isso, não acho que seja disso que você está falando. Você está se referindo a serviços como https://cdnjs.com e https://www.jsdelivr.com, e isso é um tópico ligeiramente diferente — um CDN público.

Serviços como o cdnjs possuem uma ampla rede de servidores dedicados a esse tipo de coisa.

Então,

Eles podem ser mais rápidos e ajudam a reduzir a carga no seu servidor.

Mas… esse benefício de velocidade também está disponível se você usar /vendor em um site que configurou o Discourse para usar um CDN privado.

Além disso, em relação à largura de banda, a maioria das bibliotecas JS externas tem menos de 20 KB. Então, embora você obtenha algumas economias… isso não é realmente um ponto crucial, a menos que seu site tenha centenas de milhares de visualizações por dia.

Uma das vantagens de usar algo como o cdnjs é que eles servem o mesmo arquivo e incluem cabeçalhos de cache.

O que isso significa? Bem, vamos usar o jQuery, por exemplo.

Muitos sites usam jQuery, e muitos deles usam o cdnjs para distribuir o jQuery. Quando o cdnjs entrega o arquivo jQuery ao usuário, ele inclui cabeçalhos de cache — padrão de 1 ano.

Isso significa que, se um usuário visitar o site A — que usa o cdnjs para jQuery — e depois visitar o site B, que também usa o mesmo arquivo com a mesma versão, o navegador não precisará baixar o jQuery novamente, pois ele está em cache — o que resulta em carregamento mais rápido da página.

O ponto acima é a maior vantagem de usar algo como o cdnjs para suas bibliotecas externas.
No entanto, muito poucas bibliotecas são tão comuns quanto o jQuery, então realmente depende de quão comum é a biblioteca.

Ao carregar arquivos do cdnjs, você também precisará garantir que os adicione às configurações de CSP.

Então, acho que a resposta aqui é… depende.

Você está carregando a biblioteca como está?
Ela é comum?
Ela é do lado maior?

Se sim, talvez use um CDN. Se não, mantenha simples e apenas adicione-a em /vendor.

Uma pequena atualização aqui: Chrome, Safari e Firefox não funcionam mais dessa maneira. Não há mais cache compartilhado entre sites:

Alguém pode compartilhar um link para um plugin que usa o método de adicionar bibliotecas de terceiros através da pasta /vendor ou de uma CDN?

Não consegui encontrar nenhuma documentação sobre isso e estou tendo problemas para incluir uma biblioteca de terceiros no meu plugin, registrá-la corretamente, conformar-me à estrutura exata da pasta e escrever corretamente a instrução de importação nos arquivos do controlador.

Obrigado antecipadamente pela ajuda!

discourse-math pode ser uma boa referência - ele tem vários scripts ‘vendored’ no diretório /public. Ou um exemplo mais simples poderia ser discourse-client-performance.