7

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

快照商店

检查标题显示 Facebook 做了 20 分钟: Cache-Control public, max-age=1200 Connection keep-alive Content-Type application/x-javascript; charset=utf-8 日期 2014 年 9 月 23 日星期二 04:46:38 GMT Etag "566aa5d57a352e6f298ac52e73344fdc" 到期 2014 年 9 月 23 日星期二 05:06:38 GMT

和 Google Analytics 做 2 小时: 键值响应 HTTP/1.1 200 OK 日期 Tue, 23 Sep 2014 04:45:49 GMT Expires Tue, 23 Sep 23 06:45:49 GMT Last-Modified Mon, 08 Sep 2014 18:50 :13 GMT X-Content-Type-Options nosniff Content-Type text/javascript Server Golfe2 Age 1390 Cache-Control public, max-age=7200 Alternate-Protocol 80:quic,p=0.002 Content-Length 16,062

有没有办法强迫他们延长有效期?

4

2 回答 2

5

这些脚本具有较短的缓存过期标头,因为它们经常更新。当 Facebook 和 Google 添加新功能并修复错误时,他们会通过覆盖现有文件(您在问题中链接到的文件)来部署这些更改。这使这些服务的用户无需执行任何操作即可获得最新功能,但其代价是(正如您所指出的)需要短缓存过期标头。

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

此外,您自己这样做很可能最终会导致性能的净损失,因为您将失去由于这些服务的绝对受欢迎程度而获得的网络缓存效果。例如,我想当大多数用户访问您的网站时,他们已经拥有这些脚本的缓存版本(即,很可能在过去两个小时内的某个时间,访问您网站的人还访问了另一个使用 Google Analytics 的网站) . 另一方面,如果您托管自己的版本,首次访问者将始终必须下载您的版本。

总而言之,我不会竭尽全力解决这个“问题”。这样做会花费很多时间,并且可能不会给你想要的效果。

于 2014-09-25T17:53:37.940 回答
0

最终实现的解决方案是转移到 Facebook 的重定向 API,它不会在每个页面加载时强制加载他们的脚本。这实际上也是 StackOverflow 在这里所做的。在私人/隐身浏览器中启动会话,您会看到。此链接可能会有所帮助:https ://developers.facebook.com/docs/php/howto/example_facebook_login

于 2016-01-30T05:58:21.633 回答