过期Facebook JS SDK和Google Analytics的标题

过期Facebook JS SDK和Google Analytics的标题,facebook,google-analytics,webserver,pagespeed,expires-header,Facebook,Google Analytics,Webserver,Pagespeed,Expires Header,我们都知道,在静态资源中添加一个遥远的过期日期是提高网站页面加载速度的一个好做法。因此,我们已经为我们所有的资源确保了这一点,但非常常见的Facebook JS SDK和Google Analytics没有做到这一点,从而降低了整个页面的速度分数 检查标题显示Facebook需要20分钟: 缓存控制公用,最大使用年限=1200 连接保持活动状态 内容类型应用程序/x-javascript;字符集=utf-8 日期2014年9月23日星期二04:46:38 GMT Etag“566aa5d57a

我们都知道,在静态资源中添加一个遥远的过期日期是提高网站页面加载速度的一个好做法。因此,我们已经为我们所有的资源确保了这一点,但非常常见的Facebook JS SDK和Google Analytics没有做到这一点,从而降低了整个页面的速度分数

检查标题显示Facebook需要20分钟: 缓存控制公用,最大使用年限=1200 连接保持活动状态 内容类型应用程序/x-javascript;字符集=utf-8 日期2014年9月23日星期二04:46:38 GMT Etag“566aa5d57a352e6f298ac52e73344fdc” 2014年9月23日星期二05:06:38 GMT到期

谷歌分析需要2小时: 关键值 响应HTTP/1.1200正常 日期2014年9月23日星期二04:45:49 GMT 2014年9月23日星期二06:45:49 GMT到期 最后修改日期:2014年9月8日星期一18:50:13 GMT X-Content-Type-Options-nosniff 内容类型text/javascript 服务器Golfe2 1390岁 缓存控制公用,最大年龄=7200 备选方案80:quic,p=0.002 内容长度16062


有没有办法强制它们延长到期日期?

这些脚本有一个短的缓存到期头,因为它们经常更新。当Facebook和Google添加新功能并修复bug时,他们会通过覆盖现有文件(您在问题中链接的文件)来部署这些更改。这允许这些服务的用户无需做任何事情就可以获得最新的功能,但这是以(正如您所指出的)需要短缓存过期头为代价的

可以自己托管这些脚本,并在其上设置“远未来过期”标题,但这需要在库更改时手动更新它们。这将非常耗时,而且通常是不可能的,因为大多数更新都没有放在公共变更日志中

此外,您自己这样做很可能会导致性能的净损失,因为您将失去由于这些服务的普及而获得的网络缓存效果。例如,我可以想象,当大多数用户访问您的网站时,他们已经有了这些脚本的缓存版本(也就是说,在过去两个小时的某个时候,访问您网站的人很可能也访问了另一个使用谷歌分析的网站)。另一方面,如果您托管了自己的版本,那么首次访问的用户总是需要下载您的版本


总而言之,我不会特意去解决这个“问题”。这样做会花费很多时间,可能不会给你想要的效果。

最终实现的解决方案是使用Facebook的rediret API,它不会在每次加载页面时强制加载脚本。实际上StackOverflow在这里也是这么做的。在私人/匿名浏览器中启动会话,您将看到。
此链接可能会有所帮助:

虽然可以下载脚本并使用我选择的expires头在本地为它们提供服务,但我还是不愿意采用这种解决方案。ga.js是由异步运行的代码添加的(假设代码段设置正确)这不会真正影响网站的性能。虽然我感谢你的时间和回答,但它并没有真正回答我的问题,我的问题是关于强迫他们有更长的过期时间,也许是通过一些未记录的调整。即使Google/FB脚本经常被更新,我的猜测是,在大多数情况下,我们也可以忍受一周的过期。他们可能会出于自己的原因选择更短的过期时间,但可能他们会将此选项保留在某个可选或可调整的位置。不,您(无法访问其服务器的人)无法更改缓存控制标头。老实说,在我听来,你好像在使用谷歌页面速度这样的工具,你很沮丧,因为它在你控制之外的事情上与你对接。虽然我理解这种挫折感,但你不应该制定一套规则,你应该制定规则背后的原则。如果你真的不喜欢过期时间,你可以随时向库提交bug或功能请求。我不知道Facebook的情况,但是对于谷歌分析,你可以在他们的网站上提交一个功能请求。谷歌分析的2小时时限意味着每两小时更新一次指标。更长的时间会对过时的统计数据产生负面影响。我猜Facebook SDK也有类似的工作方式。@PhilipWalton感谢您的链接,我添加了一个我为原则而开发的请求,但在为脚本本身设置一个较短的过期时间方面看不到任何原则。请您将您的回答扩展一点。我也面临同样的问题。您是如何使用Facebook重定向API的???这应该是一个良好的开端: