如何在.htaccess中为谷歌分析外部JS文件设置浏览器缓存过期时间
嘿,这个问题我之前帮不少开发者捋清楚过,先给你吃个定心丸——你没法通过自己的.htaccess直接控制谷歌托管的外部JS文件的缓存头,毕竟那是谷歌服务器上的资源,轮不到咱们的服务器来设置HTTP头。不过有几个实用的办法能搞定谷歌PageSpeed的这个提示,或者从根源优化:
先确认谷歌本身的缓存设置
其实谷歌的分析脚本(比如analytics.js或者gtag.js)本身已经配置了相当合理的缓存策略,通常Cache-Control头会设成public, max-age=31536000(也就是一年)。有时候PageSpeed的提示可能是误报,你可以打开Chrome开发者工具的「Network」面板,刷新页面后查看这个JS文件的响应头,如果已经有长时效的缓存设置,那这个提示大概率可以忽略。改用异步/延迟加载脚本
就算缓存没问题,异步加载能减少脚本对首屏渲染的阻塞,同时不影响浏览器对它的缓存。把你的谷歌分析代码改成下面这样:<script async src="https://www.google-analytics.com/analytics.js"></script>或者用
defer属性,它会在DOM加载完成后再执行脚本,同样能提升页面加载表现。托管本地副本(谨慎使用)
如果你实在想通过自己的.htaccess控制缓存,可以把谷歌的JS文件下载到自己的服务器上,然后在.htaccess里给它设置缓存规则:<FilesMatch "(analytics\.js|gtag\.js)"> ExpiresActive On ExpiresDefault "access plus 1 year" Header set Cache-Control "public, max-age=31536000" </FilesMatch>但要注意!谷歌会不定期更新分析脚本,本地副本可能会错过更新导致统计功能异常。如果要这么做,最好写个自动脚本定期拉取最新版本,不然不推荐这个方案。
直接忽略误报提示
要是你已经确认谷歌的缓存头正常,那PageSpeed的这个提示可能是检测时的网络问题或者延迟导致的,完全不用在意,它不会影响你的网站实际性能和用户体验。
内容的提问来源于stack exchange,提问作者Craig

