利用浏览器缓存来缓存外部文件

16

我想将我的谷歌页面速度测试评分提高,但还有一些外部文件也需要被缓存,有人知道最好的处理方法吗?

https://s.swiftypecdn.com/cc.js (5 minutes)
https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js (60 minutes)
https://pagead2.googlesyndication.com/pagead/osd.js (60 minutes)
https://www.google-analytics.com/plugins/ua/linkid.js (60 minutes)
https://hey.hellobar.com/…d5837892514411fd16abbb3f71f0d400607f8f0b (2 hours)
https://www.google-analytics.com/analytics.js (2 hours)
4个回答

10

将内容复制到您的服务器并在本地或CDN上提供,可以使用不同的浏览器缓存设置。利用cronjob或类似的工具定期更新GA脚本。

在WordPress中,有一些插件可以为您完成此操作,例如:Above The Fold,他们称此功能为Javascript本地化

另外,我在服务器上使用Google Pagespeed模块和它的指令MapProxyDomain,再结合替代的异步跟踪片段。对我来说,这似乎是最优雅的解决方案。

这应该足够让您开始解决问题了。


插件“above-the-fold-optimization”于2018年4月1日关闭 :( - Marco Panichi
1
@MarcoPanichi 你说得没错,但现在有一些替代方案,比如CAOS插件:https://wordpress.org/plugins/host-analyticsjs-local/ - Vladan
在您的解决方案中,定期更新脚本是可以的,但这种方法不被谷歌推荐。请参见此链接 - Mohsen Hosseinalizadeh

5

如何设置外部资源的缓存控制?

如果你无法控制服务器发送的头文件,那么你就无法进行控制。

换句话说,要么自己托管一份副本,否则你将无能为力。

谢谢!


0

对于那些文件,目前没有解决方案。如果这些文件是像 Bootstrap CDN 这样的 CDN,你可以将这些文件复制到本地主机上,但如果这些请求是在运行时生成的,那么你无能为力。 :)


0

你可以自己创建缓存

将一些文件放置在浏览器的localStorage中(在第一次从远程服务器获取后),下一次就可以从本地副本提供服务。这样,您可以将东西存储在需要它们的地方 - 唯一需要注意的是更新它们,您需要一种方法在需要新版本时替换这些文件。

如果您不想从头开始做这件事,这里有一些JavaScript库:
https://www.sitepoint.com/9-javascript-libraries-working-with-local-storage/

例如,看看这个lsCache,它看起来非常实用:

    lscache.set('greeting', 'Hello World!', 2);     // 2 minute expiration
    lscache.get('greeting');                        // returns "Hello World!"
    lscache.remove('greeting');                     // remove
    lscache.flush();                                // flush the entire cache
    lscache.flushExpired();                         // flush only expired items

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接