在单个网站上的 Page Speed Insights 中收到奇怪的错误

Receiving strange error in Page Speed Insights on a single website

我的服务器上有一个网站不会 运行 在 Page Speed Insights 中(此服务器上的所有其他网站 运行 正常):https://[URL]/。我收到以下错误:

发生错误 Lighthouse 返回错误:PAGE_HUNG。由于页面停止响应,Lighthouse 无法可靠地加载您请求的 URL。您可以刷新重试。 如果问题仍然存在,请访问 PageSpeed Insights 邮件列表以获得支持。

但是,该站点在所有浏览器中对我来说都可以正常加载。

那是因为您的网站有错误。

如果您将用户代理设置为移动设备 phone,您的“自动优化”JS 文件中似乎有一个错误,这意味着它会卡在一个循环中,向控制台打印一个空数组。

重现步骤

  1. 在 Google Chrome (f12)
  2. 中打开开发者工具
  3. 将设备设置为 'Galaxy S5'(左上角,第二个图标看起来像手机 phone 和平板电脑以激活“设备工具栏”)
  4. 在打开“控制台”选项卡的情况下重新加载页面。
  5. 观看每秒 12000 console.logs 的滚动!

如何修复

据我所知,这是由于您的滑块造成的,它似乎可以在桌面上很好地记录图像(6 张图像),但第二个是移动用户代理,它记录一个空白数组数千次第二.

这看起来是因为您有两个使用 var i 的嵌套循环。

看起来第一个循环开始尝试遍历项目,它遇到了第二个循环(现在是一个不执行的循环,因为 slides 变量是一个空数组并且没有长度) 但是 仍然执行的一件事是 var i = 0.

然后将 i 重置为 0,并且 for (var i = 0; i < bodyClassList.length; i++) { 循环永远不会超过 0,因此它创建了一个无限循环。

var bodyClassList = document.getElementsByTagName("BODY")[0].classList;
    for (var i = 0; i < bodyClassList.length; i++) {
        if (bodyClassList[i] === 'page-id-123') {
            var slides = $('.slides li img').toArray();
            console.log(slides);
            for (var i = 0; i < slides.length; i++) { //this resets the i variable to 0 every time because slides.length = 0 (therefore i is not incremented)
                //this never gets executed as the slides.length is 0.
                //removed a load of if / else statements for brevity
            }
        }
    }

只需更改您的代码,使其中一个循环具有不同的变量名称,您就不会遇到此冲突。 (例如,第一个循环 var i 并确保第二个循环是 var j)。

我知道这可能是因为自动优化出错,所以您必须先检查未缩小的源代码,如果它使用两个不同的变量,那么您可能必须手动最小化/更改有问题的文件。

slides 变量不为空时,为什么您没有遇到同样的问题?

因为虽然第二次循环中的重置为 0 也发生在这里 i 在第二次执行第一个循环之前递增到 5。

if (bodyClassList[i] === 'page-id-123') { 出现在索引 5 处,因此当第一个循环递增到 6 时,它第二次绕过它并且 i 变量永远不会重置为 0。

具有讽刺意味的是,如果你少一张幻灯片,这个问题就会更快出现!