Github应该用作javascript库的CDN吗?[关闭]


94

从CDN而不是您自己的服务器提供javascript库具有巨大的优势。服务器的工作量较少,CDN拥有比服务器更接近用户的副本的可能性,但最重要的是,您的用户的浏览器已经从该URL缓存了该副本。最后一个意味着每个人的总工作量减少,因此这显然是一个全面的胜利,而且我们(开发人员)依赖CDN来提供我们的JavaScript的可能性更大。

但是流行的javascript CDN(Google,Microsoft,其他?)仅托管少量文件。对于其他人,我们可以选择自己托管它们,或者...将源代码控制服务器用作一种CDN。Github或类似文件不太可能具有为全球服务而优化的地理分布文件缓存。但是,如果是通常的做法,那么用户的浏览器很有可能会对其进行缓存。仅当Github自愿自愿这样做时,将工作从服务器上的工作卸载到github的论点才有效。

那么,这是惯例吗?我们应该互相鼓励吗?Github介意吗?他们有官方政策吗?


5
如果作者重新排列文件结构会怎样?这不是他在数百个网站中断时遇到的问题代码。
雷诺斯2011年

2
@Raynos如果您是GitHub存储库的“作者”,则可以控制更改。
克里斯·雅各布

2
@ChrisJacob就是重点。如果我更改了自己的文件结构,那么指向不再存在的代码段并不是我的问题。
雷诺斯2011年

5
您可以使用rawgithub.com他人共享进行中的HTML,JavaScript或CSS,以进行快速演示,也可以在jsPerf测试中使用它。
Giovanni Cappellotto

这个问题应该重新讨论,因为@GiovanniCappellotto在上面的评论中现在有一个正确的答案。
Supersharp

Answers:


93

如果您关心性能或IE9兼容性,则不应对JavaScript文件执行此操作。

GitHub不会将其“原始”文件提供给过期的标头。没有跨站点缓存的可能性,您将失去使用公共CDN托管JavaScript的最大好处。实际上,将GitHub用作CDN比在每个用户首​​次请求文件后将其简单地托管在您自己的服务器上要慢(假设您在服务器上正确配置了缓存)。

另一个问题是,GitHub不为“原始”文件提供与该文件的实际MIME类型相匹配的content-type标头。在IE9(可能还有其他浏览器/代理/防火墙/等)中,默认情况下会阻止未提供正确内容类型的JavaScript文件。您可以在BlockUI演示页面上看到实际效果,例如:

在此处输入图片说明


10
另外...“当您这样请求原始文件时,您不是直接从文件系统访问该文件!您还将遍历应用程序代码层,这肯定会降低站点速度。而是创建一个gh-pages分支,然后从那里加载它” -viatropos.com/blog/github-as-a-cdn
Chris Jacob

RawGit通过适当的Content-Type标头直接从GitHub提供原始文件。在URL中使用特定标记或提交哈希(而不是分支)。文件根据URL永久缓存。rawgit.com
KeremBaydoğan's



10

可以用于原型制作/个人用品,但对于生产而言,我会考虑:

http://www.cdnjs.com/

http://cachedcommons.org/-不再可用


我希望您知道CachedCommons.com仅来自github.com
ocodo 2012年

但是网址似乎指向CachedCommons cachedcommons.org/cache/mootools/1.2.4/javascripts/mootools.js,我想这可能是一个代理。
13年

抱歉,我的意思是,有关将Github用作CDN的旧信息显然不再适用,并且一切都很好。除了将来可能出现的可用性问题外,值得分叉一个库来避免这种情况。
ocodo

2
貌似链接到Github上会很快不会是一种选择:github.com/blog/...
meleyal

1
实际上,这不是问题,如果您打算将基于GitHub的资源用作CDN,只需确保将其托管在静态页面站点(现在为GitHub.io)中即可-这就是您应该如何在顺便说一句
ocodo

-2

我已经做了几个月了,首先有一些顾虑,但是如果您的文件可公开访问没有问题,那绝对不错,如果需要,请使用缩小版本。

但仍然-Google和MS统治着jQuery&jQuery Templates的空间-因此我将其用于此目的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.