css - Recaptcha V3 资产导致 Pagespeed 问题 - 如何推迟
问题描述
我们目前在我们网站的面向公众的部分使用 Google Recaptcha V3 - 在进行 Pagespeed Insights 性能测试(移动)时,Google 自己将未使用/未延迟的 CSS 报告为他们自己的 Recaptcha css 文件中的问题:
完整的资源地址是: https : //www.gstatic.com/recaptcha/releases/[...]/styles__ltr.css (所以它显然来自后续的 Google Recaptcha 脚本请求)
我们包含了带有“defer”属性集的原始 Google recaptcha 脚本 - 不知道我们还能做些什么来导致这个 css 被推迟,这样 Pagespeed 就不会抱怨它。在 Google Recaptcha 网站本身上找不到任何文档来帮助解决此问题。
有谁知道如何推迟这个 CSS 以提高页面加载时间?不确定这是否是某种特定于移动设备的问题,因为 Pagespeed 根本不会在桌面上报告它。
解决方案
首先,请记住,“删除未使用的 CSS”更多的是一个指导点(前提是它不是渲染阻塞),它表明它是浪费的字节(如果 recaptcha 触发它实际上不是,因为它然后需要那个CSS来渲染图像'你是人工检查'等)
虽然我不能给你一个理想的答案,因为它是你无法控制的代码,但我可以给你两种方法来测试它的影响/它是否真的是一个问题和一个绕过加载顺序的“hack”。
使用应用节流进行测试
模拟限制有时会导致意外行为,这是 Page Speed Insights 网站使用的。
如果您使用浏览器审核(使用相同的引擎 - Lighthouse)来运行测试,您可以选择将限制从模拟更改为应用。
尽管您的分数会发生变化(applied throttling
比不那么宽容simulated throttling
),但您会获得更真实的事件顺序,因为延迟和减速是“真实的”,而不是基于全速加载页面并应用公式来猜测加载时间做出最佳猜测。
在 Chrome (F12) 中打开开发工具 -> 审核 -> 节流 -> 设置为 Applied Slow 4G, 4x CPU Slowdown。-> 运行审计。
在使用这种评估页面速度的方式时,看看问题是否仍然存在。
如果是这样,现实世界性能的解决方法/测试如下:-
强制脚本在一段时间后加载(黑客方式!)
这不是一个理想的解决方案,但它有利于测试,如果它确实减慢了您的网站关键加载时间,作为最后的手段。
5 秒后动态插入脚本。
(请注意,以下代码未经测试,可能无法正常工作,仅用于说明,为您指明正确的方向。您很可能不需要该script.onload
部分并且可以正常包含该部分)
setTimeout(function(){
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.onload = function() {
grecaptcha.ready(function() {
grecaptcha.execute('_reCAPTCHA_site_key_', {action: 'homepage'}).then(function(token) {
...
});
});
}
script.src = "https://www.google.com/recaptcha/api.js?render=_reCAPTCHA_site_key";
head.appendChild(script);
}, 5000);
推荐阅读
- google-apps-script - 按名称搜索 google drive 文件并获取其 ID
- excel - 添加过滤器时,基于其他列的自动填充列值失败
- machine-learning - 高斯朴素贝叶斯是否有参数需要调整
- angular - 如果使用 ngIf 隐藏字段,如何从角度反应形式切换(添加/删除)表单控件?
- c++ - 链表中双指针的使用
- react-spring - 如何在单个组件上附加多个反应弹簧?
- c - c语言中的面试题reg二进制位操作
- docker - 如何从 docker-compose 或 docker run 写入现有的填充卷
- javascript - 根据日期从数据库中获取唯一值,当用户单击日期时,然后展开数据库中可用的详细信息
- javascript - 如何通过同一行的另一列的一个文本框中的输入获取值